টেনসরফ্লো স্ট্রাইড যুক্তি


115

আমি বুঝতে চেষ্টা করছি পদক্ষেপ tf.nn.avg_pool, tf.nn.max_pool, tf.nn.conv2d মধ্যে যুক্তি।

ডকুমেন্টেশন বারবার বলছেন

স্ট্রাইডস: ইনপুটগুলির একটি তালিকা যা দৈর্ঘ্য> = 4 রয়েছে ইনপুট টেনসরের প্রতিটি মাত্রার জন্য স্লাইডিং উইন্ডোর স্ট্রাইড।

আমার প্রশ্নগুলি হ'ল:

  1. 4+ পূর্ণসংখ্যার প্রত্যেকটি কী উপস্থাপন করে?
  2. বন্দীদের জন্য কেন তাদের অবশ্যই পদক্ষেপ থাকতে হবে [0] = পদক্ষেপ [3] = 1
  3. ইন এই উদাহরণে আমরা দেখতে tf.reshape(_X,shape=[-1, 28, 28, 1])। কেন -1?

দুর্ভাগ্যক্রমে -1 ব্যবহার করে পুনরায় আকার দেওয়ার জন্য ডক্সের উদাহরণগুলি এই দৃশ্যে খুব ভাল অনুবাদ করে না।

উত্তর:


224

পুলিং এবং কনভোলজিনাল অপস ইনপুট টেনসর জুড়ে একটি "উইন্ডো" স্লাইড করে। tf.nn.conv2dউদাহরণ হিসাবে ব্যবহার করা: যদি ইনপুট টেনসরটির 4 টি মাত্রা থাকে: [batch, height, width, channels]তবে কনভোলশনটি 2D উইন্ডোতে height, widthমাত্রাগুলিতে কাজ করে।

stridesপ্রতিটি মাত্রায় উইন্ডোটি কতটা স্থানান্তরিত করে তা নির্ধারণ করে। সাধারণ ব্যবহার প্রথমটি (ব্যাচ) এবং সর্বশেষে (গভীরতা) 1 এ স্থির করে।

আসুন একটি খুব দৃ concrete় উদাহরণ ব্যবহার করুন: 32x32 গ্রেস্কেল ইনপুট চিত্রের উপর একটি 2-ডি কনভোলিউশন চালানো। আমি গ্রেস্কেল বলি কারণ এরপরে ইনপুট চিত্রটির গভীরতা = 1 রয়েছে যা এটি সহজ রাখতে সহায়তা করে। সেই চিত্রটি এর মতো দেখতে দিন:

00 01 02 03 04 ...
10 11 12 13 14 ...
20 21 22 23 24 ...
30 31 32 33 34 ...
...

আসুন একটি একক উদাহরণ (ব্যাচের আকার = 1) এর উপর দিয়ে 2x2 কনভ্যুলেশন উইন্ডোটি চালানো যাক। আমরা কনভোলশনটিকে 8 এর আউটপুট চ্যানেল গভীরতা দেব।

কনভোলশন ইনপুট আছে shape=[1, 32, 32, 1]

আপনি যদি নির্দিষ্ট strides=[1,1,1,1]করে থাকেন padding=SAMEতবে ফিল্টারটির আউটপুট হবে [1, 32, 32, 8]।

ফিল্টারটি প্রথমে এর জন্য একটি আউটপুট তৈরি করবে:

F(00 01
  10 11)

এবং তারপরে:

F(01 02
  11 12)

ইত্যাদি। তারপরে এটি গণনা করে দ্বিতীয় সারিতে চলে যাবে:

F(10, 11
  20, 21)

তারপর

F(11, 12
  21, 22)

আপনি যদি [1, 2, 2, 1] এর একটি প্রান্ত নির্দিষ্ট করেন তবে এটি ওভারল্যাপিং উইন্ডোগুলি করবে না। এটি গণনা করা হবে:

F(00, 01
  10, 11)

এবং তারপর

F(02, 03
  12, 13)

পুলিং অপারেটরগুলির জন্য একইভাবে কাজ করে।

প্রশ্ন 2: কেন বন্দীদের জন্য [1, x, y, 1] পদক্ষেপ?

প্রথম 1 টি ব্যাচ: আপনি সাধারণত আপনার ব্যাচের উদাহরণগুলি এড়িয়ে যেতে চান না বা এগুলি প্রথম স্থানে অন্তর্ভুক্ত করা উচিত নয়। :)

শেষ 1টি সমঝোতার গভীরতা: আপনি সাধারণত একই কারণে ইনপুটগুলি এড়িয়ে যেতে চান না।

কনফ 2 ডি অপারেটরটি আরও সাধারণ, সুতরাং আপনি এমন কনভোলিউশন তৈরি করতে পারেন যা উইন্ডোটিকে অন্যান্য মাত্রার সাথে স্লাইড করে দেয়, তবে এটি কনভেন্টগুলিতে সাধারণ ব্যবহার নয়। সাধারণ ব্যবহারটি স্থানিকভাবে তাদের ব্যবহার করা।

কেন -1 -1 এ পুনরায় আকার দেওয়া হ'ল এমন একটি স্থানধারক যা "সম্পূর্ণ টেনসারের জন্য প্রয়োজনীয় আকারের সাথে মেলে প্রয়োজনীয়ভাবে সামঞ্জস্য করুন।" কোডটি ইনপুট ব্যাচের আকারের চেয়ে আলাদা করে তোলার এমন একটি উপায়, যাতে আপনি নিজের পাইপলাইন পরিবর্তন করতে পারেন এবং কোডের যে কোনও জায়গায় ব্যাচের আকারকে সামঞ্জস্য করতে হবে না।


5
@ ডেরেক কারণ (পাঠ্য থেকে) "আমরা এই সমঝোতাটিকে 8 এর আউটপুট চ্যানেল গভীরতা দেব"।
কনভলিউশন

17

ইনপুটগুলি 4 টি মাত্রিক এবং ফর্মের: [batch_size, image_rows, image_cols, number_of_colors]

স্ট্রাইডস, সাধারণভাবে, প্রয়োগের ক্রিয়াকলাপগুলির মধ্যে একটি ওভারল্যাপ সংজ্ঞায়িত করে। কনফিডিয়াল ফিল্টারগুলির ক্রমাগত অ্যাপ্লিকেশনগুলির মধ্যে দূরত্ব কী তা সুনির্দিষ্টভাবে বোঝায় conv একটি নির্দিষ্ট মাত্রায় 1 এর মানটির অর্থ হ'ল আমরা প্রতিটি সারি / কর্নারে অপারেটরটি প্রয়োগ করি, 2 এর মান প্রতি সেকেন্ডে বোঝায় এবং তাই।

পুনরায় 1) কনভোলশনের জন্য যে মানগুলি গুরুত্বপূর্ণ তা হ'ল ২ য় এবং তৃতীয় এবং তারা সারি এবং কলামগুলির সাথে সমাবর্তনীয় ফিল্টারগুলির প্রয়োগের ক্ষেত্রে ওভারল্যাপকে উপস্থাপন করে। [1, 2, 2, 1] এর মান বলে যে আমরা প্রতিটি দ্বিতীয় সারিতে এবং কলামে ফিল্টার প্রয়োগ করতে চাই।

পুনরায় 2) আমি প্রযুক্তিগত সীমাবদ্ধতাগুলি (CUDNN প্রয়োজন হতে পারে) জানি না তবে সাধারণত লোকেরা সারি বা কলামের মাত্রা বরাবর স্ট্রাইড ব্যবহার করে। এটি অগত্যা ব্যাচের আকারের চেয়ে এটি করার কোনও અર્થ নেই। শেষ মাত্রা সম্পর্কে নিশ্চিত না।

পুনরায় 3) মাত্রাগুলির কোনওটির জন্য -1 নির্ধারণের অর্থ, "প্রথম মাত্রার জন্য মানটি সেট করুন যাতে টেনসরতে উপাদানগুলির মোট সংখ্যা অপরিবর্তিত থাকে"। আমাদের ক্ষেত্রে -1 ব্যাচ_সাইজের সমান হবে।


11

1-ম্লান ক্ষেত্রে কী পদক্ষেপ নিয়ে আসে তা দিয়ে শুরু করা যাক।

আসুন ধরে নেওয়া যাক আপনার input = [1, 0, 2, 3, 0, 1, 1]এবং kernel = [2, 1, 3]কনভ্যুশনের ফলাফলটি [8, 11, 7, 9, 4], যা আপনার কার্নেলটিকে ইনপুটটির উপরে স্লাইড করে, উপাদান অনুসারে গুণিত করা এবং সমস্ত কিছু সংশ্লেষ করে গণনা করা হয়। এটি পছন্দ :

  • 8 = 1 * 2 + 0 * 1 + 2 * 3
  • 11 = 0 * 2 + 2 * 1 + 3 * 3
  • 7 = 2 * 2 + 3 * 1 + 0 * 3
  • 9 = 3 * 2 + 0 * 1 + 1 * 3
  • 4 = 0 * 2 + 1 * 1 + 1 * 3

এখানে আমরা একটি উপাদান দ্বারা স্লাইড, কিন্তু কিছুই অন্য কোনও সংখ্যা ব্যবহার করে আপনাকে থামায় না। এই সংখ্যাটি আপনার পদক্ষেপ। আপনি কেবল প্রতিটি এস-তম ফলাফল গ্রহণ করে 1-ত্রি-সমাবর্তনের ফলাফলকে নিম্নরূপ হিসাবে বিবেচনা করতে পারেন।

ইনপুট আকার জানা আমি , কার্নেল আকার , দীর্ঘ গুলি এবং প্যাডিং পি আপনি সহজেই যেমন সংবর্তন আউটপুট আকার নিরূপণ করতে পারেন:

এখানে চিত্র বর্ণনা লিখুন

এখানে || অপারেটর মানে সিলিং অপারেশন। একটি পুলিং স্তর s = 1 এর জন্য।


এন-ডিমে কেস

1-ম্লাদ মামলার জন্য গণিতটি জানা, এন-ডিম্প কেস একবার সহজেই দেখেন যে প্রতিটি ম্লান স্বাধীন। সুতরাং আপনি কেবল প্রতিটি মাত্রা পৃথকভাবে স্লাইড করুন। এখানে 2-ডি এর উদাহরণ দেওয়া আছে । লক্ষ্য করুন যে আপনার সমস্ত মাত্রায় একই পদক্ষেপের দরকার নেই। সুতরাং একটি এন-ম্লম ইনপুট / কার্নেলের জন্য আপনার এন স্ট্রাইড সরবরাহ করা উচিত।


সুতরাং এখন আপনার সমস্ত প্রশ্নের উত্তর দেওয়া সহজ:

  1. 4+ পূর্ণসংখ্যার প্রত্যেকটি কী উপস্থাপন করে? কনফাইড , পুল আপনাকে জানায় যে এই তালিকাটি প্রতিটি মাত্রার মধ্যে অগ্রগতির প্রতিনিধিত্ব করে। লক্ষ্য করুন যে স্ট্রাইডের তালিকার দৈর্ঘ্য কার্নেল টেনসারের স্তরের সমান।
  2. বন্দীদের জন্য কেন তাদের অবশ্যই পদক্ষেপ থাকতে হবে [0] = পদক্ষেপ 3 = 1 । প্রথম মাত্রাটি ব্যাচের আকার, শেষটি চ্যানেল। ব্যাচ বা চ্যানেল উভয়ই এড়িয়ে যাওয়ার কোনও মানে নেই। সুতরাং আপনি এগুলি তৈরি করুন 1.। প্রস্থ / উচ্চতার জন্য আপনি কিছু এড়িয়ে যেতে পারেন এবং সে কারণেই তারা সম্ভবত 1 না।
  3. tf.reshape (_ এক্স, আকৃতি = [- 1, 28, 28, 1])। কেন -1? tf.reshape এটি আপনার জন্য আবরণ করেছে:

    আকৃতির একটি উপাদান যদি বিশেষ মান -1 হয় তবে সেই মাত্রার আকারটি এমনভাবে গণনা করা হয় যাতে মোট আকার স্থির থাকে। বিশেষত, [-1] এর একটি আকৃতি 1-ডি তে সমতল হয়। আকারের সর্বাধিক একটি উপাদান -1 হতে পারে।


2

@ ডিগা ব্যাখ্যা করে একটি দুর্দান্ত কাজ করেছেন এবং আমি এটির পক্ষে কতটা সহায়ক হতে পারি তার জন্য আমি কৃতজ্ঞ হতে পারি না। একইভাবে, আমি কীভাবে stride3 ডি কনভোলশনে কাজ করে তা সম্পর্কে আমার অনুসন্ধানগুলি ভাগ করতে চাই ।

কনফিউডে টেনসরফ্লো ডকুমেন্টেশন অনুসারে ইনপুটটির আকারটি অবশ্যই এই ক্রমে থাকতে হবে:

[batch, in_depth, in_height, in_width, in_channels]

আসুন একটি উদাহরণ ব্যবহার করে চরম ডান থেকে বামে ভেরিয়েবলগুলি ব্যাখ্যা করি explain ধরে নিচ্ছি ইনপুট আকারটি input_shape = [1000,16,112,112,3]

input_shape[4] is the number of colour channels (RGB or whichever format it is extracted in)
input_shape[3] is the width of the image
input_shape[2] is the height of the image
input_shape[1] is the number of frames that have been lumped into 1 complete data
input_shape[0] is the number of lumped frames of images we have.

নীচে স্ট্রাইড কীভাবে ব্যবহৃত হয় তার একটি সংক্ষিপ্ত ডকুমেন্টেশন রয়েছে।

স্ট্রাইডস: দৈর্ঘ্য> = ৫. দৈর্ঘ্যের 1-ডি টেনসরযুক্ত ইনটগুলির একটি তালিকা 5. ইনপুটটির প্রতিটি মাত্রার জন্য স্লাইডিং উইন্ডোর স্ট্রাইড। অবশ্যই থাকতে হবেstrides[0] = strides[4] = 1

অনেকগুলি কাজের মধ্যে নির্দেশিত হিসাবে, স্ট্রাইডগুলি কেবল একটি উইন্ডো বা কার্নেলটি কাছাকাছি উপাদান থেকে দূরে লাফিয়ে কতটা পদক্ষেপে বোঝায়, এটি কোনও ডেটা ফ্রেম বা পিক্সেল হোক (এটি উপায় দ্বারা প্যারাফ্রেসড)।

উপরের ডকুমেন্টেশন থেকে, 3 ডি-তে একটি স্ট্রাইড এই ধাপগুলি = (1, এক্স , ওয়াই , জেড , 1) এর মতো দেখাবে ।

ডকুমেন্টেশন যে জোর দেয় strides[0] = strides[4] = 1

strides[0]=1 means that we do not want to skip any data in the batch 
strides[4]=1 means that we do not want to skip in the channel 

স্ট্রাইডস [এক্স] এর অর্থ হ'ল কাঠের ফ্রেমে আমাদের কতগুলি স্কিপ তৈরি করা উচিত। সুতরাং উদাহরণস্বরূপ, যদি আমাদের 16 টি ফ্রেম থাকে তবে এক্স = 1 এর অর্থ প্রতিটি ফ্রেম ব্যবহার করুন। এক্স = 2 এর অর্থ প্রতি সেকেন্ডের ফ্রেম ব্যবহার করুন এবং এটি চালিয়ে যায়

পদক্ষেপ [y] এবং পদক্ষেপ [z] @dga দ্বারা ব্যাখ্যা অনুসরণ করুন যাতে আমি সেই অংশটি আর করব না।

তবে কেরাসে, আপনাকে কেবলমাত্র তিনটি পূর্ণসংখ্যার একটি টুপল / তালিকা নির্দিষ্ট করতে হবে, প্রতিটি স্থানিক মাত্রার সাথে সমাবর্তনের ধাপ নির্দিষ্ট করে যেখানে স্থানিক মাত্রা স্ট্রাইড [x], স্ট্রাইড [y] এবং স্ট্রাইড [জেড] হয়। পদক্ষেপ [0] এবং পদক্ষেপ [4] ইতিমধ্যে 1 এ ডিফল্ট হয়েছে।

আমি আশা করি কেউ এই সহায়ক খুঁজে পেয়েছেন!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.