Tf.nn.max_pool তে সেন্সরফ্লোতে 'Same' এবং 'VALID' প্যাডিংয়ের মধ্যে পার্থক্য কী?


309

'একই' এবং এ 'বৈধ' প্যাডিং মধ্যে পার্থক্য কি tf.nn.max_poolএর tensorflow?

আমার মতে, 'ভাল্ড' এর অর্থ যখন আমরা সর্বোচ্চ পুল করব তখন প্রান্তগুলির বাইরে শূন্য প্যাডিং থাকবে না।

মতে গভীর শেখার জন্য সংবর্তন গাণিতিক একটি নির্দেশিকা , এটা বলছেন যে, পুকুর অপারেটর কোন প্যাডিং থাকবে অর্থাত শুধু ব্যবহার 'বৈধ' tensorflow। তবে সর্বোচ্চ পুলে 'সমে' প্যাডিং tensorflowকী?


3
বিশদের জন্য tensorflow.org/api_guides/python/… পরীক্ষা করুন, tf এটি এভাবেই করেছেন।
গ্যাব্রিয়েলচু


4
প্যাডিং এবং স্ট্রাইড কীভাবে কাজ করে তা বুঝতে এই আশ্চর্যজনক জিআইএফগুলি দেখুন। লিঙ্ক
দীপক

1
@ গ্যাব্রিয়েলচু আপনার লিঙ্কটি মারা গেছে বলে মনে হচ্ছে এবং এখন একটি সাধারণ ওভারভিউতে পুনর্নির্দেশ।
ম্যাট

টেনসরফ্লো ২.০-তে উন্নীত হওয়ার সাথে সাথে কেরাস দ্বারা জিনিসগুলি প্রতিস্থাপন করা হবে এবং আমি বিশ্বাস করি আপনি কেরাস ডকুমেন্টেশনে পুলিংয়ের তথ্য খুঁজে পেতে পারেন। @ ম্যাট
গ্যাব্রিয়েলচু

উত্তর:


163

আমি এটি পরিষ্কার করার জন্য একটি উদাহরণ দেব:

  • x: আকারের ইনপুট চিত্র [2, 3], 1 চ্যানেল
  • valid_pad: 2x2 কার্নেল, স্ট্রাইড 2 এবং VALID প্যাডিং সহ সর্বাধিক পুল।
  • same_pad: 2x2 কার্নেল, স্ট্রাইড 2 এবং সম প্যাডিং সহ সর্বাধিক পুল (এটি যাওয়ার সর্বোত্তম উপায়)

আউটপুট আকারগুলি হল:

  • valid_pad: এখানে, কোনও প্যাডিং নেই সুতরাং আউটপুট আকার [1, 1]
  • same_pad: এখানে, আমরা চিত্রটি [2, 4] আকারে প্যাড করব ( -infএবং পরে সর্বোচ্চ পুল প্রয়োগ করুন), ফলে আউটপুট আকারটি [1, 2]

x = tf.constant([[1., 2., 3.],
                 [4., 5., 6.]])

x = tf.reshape(x, [1, 2, 3, 1])  # give a shape accepted by tf.nn.max_pool

valid_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='VALID')
same_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='SAME')

valid_pad.get_shape() == [1, 1, 1, 1]  # valid_pad is [5.]
same_pad.get_shape() == [1, 1, 2, 1]   # same_pad is  [5., 6.]


603

আপনার যদি আসকি শিল্প পছন্দ হয়:

  • "VALID" প্যাডিং ছাড়াই:

       inputs:         1  2  3  4  5  6  7  8  9  10 11 (12 13)
                      |________________|                dropped
                                     |_________________|
    
  • "SAME" = শূন্য প্যাডিং সহ:

                   pad|                                      |pad
       inputs:      0 |1  2  3  4  5  6  7  8  9  10 11 12 13|0  0
                   |________________|
                                  |_________________|
                                                 |________________|
    

এই উদাহরণে:

  • ইনপুট প্রস্থ = 13
  • ফিল্টার প্রস্থ = 6
  • স্ট্রাইড = 5

মন্তব্য:

  • "VALID" কেবল কখনও ডান-সর্বাধিক কলামগুলি (বা নীচে সর্বাধিক সারিগুলি) ফেলে দেয়।
  • "SAME" সমানভাবে বাম এবং ডান প্যাড করার চেষ্টা করে, তবে যুক্ত হওয়া কলামগুলির পরিমাণ যদি বিজোড় হয় তবে এটি ডানদিকে অতিরিক্ত কলাম যুক্ত করবে, উদাহরণস্বরূপ (একই যুক্তিটি উল্লম্বভাবে প্রযোজ্য: অতিরিক্ত সারিও থাকতে পারে) নীচে শূন্যের)।

সম্পাদনা করুন :

নাম সম্পর্কে:

  • সঙ্গে "SAME"প্যাডিং, আপনি যদি 1 এর একটি দীর্ঘ ব্যবহার করেন, লেয়ারটির আউটপুট থাকবে একই তার ইনপুট হিসাবে স্থানিক মাত্রা।
  • সঙ্গে "VALID"প্যাডিং, কোন "তৈরি আপ" প্যাডিং ইনপুট আছে। স্তরটি কেবল বৈধ ইনপুট ডেটা ব্যবহার করে।

"সােম" এর অর্থ "নীতিটি" শূন্য-প্যাডিং ব্যবহার করে তা নিশ্চিত করার জন্য যদি চিত্রের প্রস্থটি ফিল্টার প্রস্থের একাধিক না হয় বা চিত্রের উচ্চতা ফিল্টার উচ্চতার একাধিক না হয় তবে তা নিশ্চিত করতে ফিল্টার আকার পরিবর্তন করতে হবে না? "? যেমনটি রয়েছে, "ফিল্টার প্রস্থের একাধিক পর্যন্ত জিরো সহ প্যাড" যদি প্রস্থের সমস্যা হয়?
স্ট্যাটসোর্স্রেস

2
আমার নিজের পক্ষের প্রশ্নের উত্তর: না, এটি শূন্য প্যাডিংয়ের মূল বিষয় নয়। আপনি ইনপুট (শূন্য প্যাডিং সহ) দিয়ে কাজ করতে ফিল্টার আকার চয়ন করেন তবে আপনি ফিল্টার আকারের পরে শূন্য প্যাডিং পছন্দ করেন না।
স্ট্যাটসোরস্রেসেস

আমি আপনার নিজের উত্তর @ স্ট্যাটসরাস্রেস বুঝতে পারছি না। আমার কাছে মনে হচ্ছে আপনি পর্যাপ্ত জিরো যুক্ত করেছেন (সম্ভাব্য উপায় হিসাবে প্রতিসম হিসাবে) যাতে সমস্ত ইনপুটগুলি কোনও ফিল্টার দ্বারা আচ্ছাদিত হয়, আমি কি ঠিক আছি?
guillefix

2
দুর্দান্ত উত্তর, কেবল যোগ করার জন্য: সেন্সর মানগুলি নেতিবাচক হতে পারে এমন ক্ষেত্রে সর্বাধিক_পুলিংয়ের জন্য প্যাডিং রয়েছে -inf
টোন 29

কিসাইজ = ২, স্ট্রাইড = ২ এবং একই প্যাডিংয়ের সাথে যদি ইনপুট প্রস্থটি যদি একটি সমান সংখ্যা হয় তবে কী হবে ... ... তবে এটি শূন্য প্যাডযুক্ত হওয়া উচিত নয়? .... আমি যখন ডার্কফ্লো কোডের রেপো দেখছি তখন এটি বলছি , তারা ম্যাকপুলের জন্য একই প্যাড, স্ট্রাইড = 2, কেসাইজ = 2 ব্যবহার করছে .... ম্যাক্সপুলিংয়ের পরে চিত্রের প্রস্থ 416 পিক্সেল প্রস্থ থেকে 208 পিক্সেল হয়ে যায়। কেউ কি এই বিষয়টি পরিষ্কার করতে পারে?
কে.ভিিন্দি

161

যখন stride1 হয় (পুলিংয়ের চেয়ে দৃ conv়বিশ্বাসের সাথে আরও সাধারণ), আমরা নিম্নলিখিত পার্থক্যটি ভাবতে পারি:

  • "SAME": আউটপুট আকার হয় একই ইনপুট আকার। এটির জন্য ফিল্টার উইন্ডোটি ইনপুট মানচিত্রের বাইরে স্লিপ করতে প্রয়োজন, তাই প্যাড করা দরকার।
  • "VALID": ফিল্টার উইন্ডো ইনপুট মানচিত্রের ভিতরে বৈধ অবস্থানে থাকে , সুতরাং আউটপুট আকারটি সঙ্কুচিত হয় filter_size - 1। কোন প্যাডিং হয় না।

65
এটি অবশেষে সহায়ক। এই SAMEVALIDfoobar
অবধি

7
আমি মনে করি "আউটপুট আকার একই ইনপুট আকার হিসাবে" সত্য শুধুমাত্র যখন দীর্ঘ দৈর্ঘ্য 1.
omsrisagar

92

TensorFlow সংবর্তন উদাহরণ মধ্যে পার্থক্য সম্পর্কে একটি ওভারভিউ দেয় SAMEএবংVALID :

  • জন্য SAMEপ্যাডিং, আউটপুট উচ্চতা এবং প্রস্থ হিসেবে নির্ণিত হয়:

    out_height = ceil(float(in_height) / float(strides[1]))
    out_width  = ceil(float(in_width) / float(strides[2]))

এবং

  • জন্য VALIDপ্যাডিং, আউটপুট উচ্চতা এবং প্রস্থ হিসেবে নির্ণিত হয়:

    out_height = ceil(float(in_height - filter_height + 1) / float(strides[1]))
    out_width  = ceil(float(in_width - filter_width + 1) / float(strides[2]))

46

প্যাডিং ইনপুট ডেটার আকার বাড়ানোর জন্য একটি অপারেশন। 1-মাত্রিক ডেটার ক্ষেত্রে আপনি কেবল ধ্রুবক দ্বারা অ্যারে সংযোজন / প্রেন্ডিং করেন, 2-ডিমে আপনি এই ধ্রুবকগুলির সাথে ম্যাট্রিক্সকে ঘিরে থাকেন। এন-ডিমে আপনি ধ্রুবক সহ আপনার এন-মিম হাইপারকিউবকে ঘিরে রাখেন। বেশিরভাগ ক্ষেত্রে এই ধ্রুবকটি শূন্য এবং একে শূন্য-প্যাডিং বলা হয়।

এখানে p=12-ডি টেন্সরের সাথে শূন্য-প্যাডিংয়ের উদাহরণ রয়েছে : এখানে চিত্র বর্ণনা লিখুন


আপনি আপনার কার্নেলের জন্য নির্বিচারে প্যাডিং ব্যবহার করতে পারেন তবে কিছু প্যাডিং মানগুলি অন্যদের তুলনায় বেশি ঘন ঘন ব্যবহৃত হয়:

  • বৈধ প্যাডিং । সবচেয়ে সহজ ক্ষেত্রে, মানে কোনও প্যাডিং নয়। আপনার ডেটা যেমন ছিল তেমন ছেড়ে দিন।
  • একই প্যাডিংকে কখনও কখনও HALF প্যাডিং বলা হয় । একে Same বলা হয় কারণ একটি পদক্ষেপ = 1, (বা পুলিংয়ের জন্য) এর সাথে সমাবর্তনের জন্য এটি ইনপুট হিসাবে একই আকারের আউটপুট উত্পাদন করতে পারে। আকারের কার্নেলের জন্য এটিকে HALF বলা হয়k এখানে চিত্র বর্ণনা লিখুন
  • সম্পূর্ণ প্যাডিং হ'ল সর্বোচ্চ প্যাডিং যার ফলে কেবল প্যাডযুক্ত উপাদানগুলির মধ্যে কোনও সমঝোতা হয় না। আকারের কার্নেলের জন্য k, এই প্যাডিংটি সমান k - 1

টিএফ-এ নির্বিচারে প্যাডিং ব্যবহার করতে, আপনি ব্যবহার করতে পারেন tf.pad()


32

দ্রুত ব্যাখ্যা

VALID: কোনও প্যাডিং প্রয়োগ করবেন না, অর্থাত্ সমস্ত মাত্রা বৈধ বলে ধরে নিন যাতে ইনপুট চিত্রটি আপনার নির্দিষ্টকৃত ফিল্টার এবং স্ট্রাইড দ্বারা পুরোপুরি coveredেকে যায়।

SAME: ইনপুটগুলিতে প্যাডিং প্রয়োগ করুন (যদি প্রয়োজন হয়) যাতে ইনপুট চিত্রটি আপনার নির্দিষ্টকৃত ফিল্টার এবং স্ট্রাইড দ্বারা পুরোপুরি কভার হয়। প্রথম ধাপের জন্য, এটি নিশ্চিত করবে যে আউটপুট চিত্রের আকারটি ইনপুট হিসাবে একই

মন্তব্য

  • এটি কনভ লেয়ারগুলির পাশাপাশি একইভাবে সর্বাধিক পুল স্তরগুলিতে প্রযোজ্য
  • "বৈধ" শব্দটি একটি ভুলবিত্তের কিছুটা কারণ আপনি যদি চিত্রটির কিছু অংশ বাদ দেন তবে জিনিসগুলি "অবৈধ" হয় না। কখনও কখনও আপনি এমনকি এটি চান হতে পারে। এটি সম্ভবত বলা উচিত ছিলNO_PADDING পরিবর্তে ।
  • "একই" শব্দটিও একটি মিসনোমর কারণ এটি কেবলমাত্র 1 এর ধাপের জন্য বোধ করে যখন আউটপুট মাত্রা ইনপুট মাত্রা হিসাবে একই। 2 এর ধাপের জন্য, আউটপুট মাত্রা অর্ধেক হবে, উদাহরণস্বরূপ। এটি সম্ভবত AUTO_PADDINGপরিবর্তে বলা উচিত ছিল ।
  • ইন SAME(অর্থাত স্বয়ংক্রিয় প্যাড মোড), Tensorflow বিস্তার প্যাডিং করার সমানভাবে চেষ্টা উভয় বাম এবং ডান দিকে হবে।
  • ইন VALID(অর্থাত কোনো প্যাডিং মোড), Tensorflow অধিকার এবং / অথবা নীচে কোষ ড্রপ যদি আপনার ফিল্টার এবং দীর্ঘ পূর্ণ কভার ইনপুট ইমেজ চলছে না।

19

আমি সরকারী টেনসরফ্লো ডক্স থেকে এই উত্তরটি উদ্ধৃত করছি https://www.tensorflow.org/api_guides/python/nn# কনভলিউশন ' সেম ' প্যাডিংয়ের জন্য, আউটপুট উচ্চতা এবং প্রস্থকে এই হিসাবে গণনা করা হচ্ছে:

out_height = ceil(float(in_height) / float(strides[1]))
out_width  = ceil(float(in_width) / float(strides[2]))

এবং উপরের এবং বামে প্যাডিং হিসাবে গণনা করা হয়:

pad_along_height = max((out_height - 1) * strides[1] +
                    filter_height - in_height, 0)
pad_along_width = max((out_width - 1) * strides[2] +
                   filter_width - in_width, 0)
pad_top = pad_along_height // 2
pad_bottom = pad_along_height - pad_top
pad_left = pad_along_width // 2
pad_right = pad_along_width - pad_left

'ভ্যালিড' প্যাডিংয়ের জন্য, আউটপুট উচ্চতা এবং প্রস্থকে এই হিসাবে গণনা করা হয়:

out_height = ceil(float(in_height - filter_height + 1) / float(strides[1]))
out_width  = ceil(float(in_width - filter_width + 1) / float(strides[2]))

এবং প্যাডিং মানগুলি সর্বদা শূন্য থাকে।


1
সত্যই এটি প্রায় একমাত্র বৈধ এবং সম্পূর্ণ উত্তর, 1 এর ধাপে সীমাবদ্ধ নয় এবং এটি যা লাগে তা ডক্সের একটি উদ্ধৃতি is +1
পি-জিএন 26'18

1
এই উত্তরটি প্রায় পাওয়া খুব দরকারী, বিশেষত কারণ আপনি যে লিঙ্কটি নির্দেশ করেছেন সেটি আর কাজ করে না এবং গুগল টিএফ ওয়েবসাইট থেকে তথ্যটি মুছে ফেলেছে বলে মনে হয়!
ড্যানিয়েল

12

প্যাডিংয়ের তিনটি পছন্দ রয়েছে: বৈধ (কোনও প্যাডিং নেই), একই (বা অর্ধ), পূর্ণ। আপনি ব্যাখ্যা (Theano মধ্যে) জানতে পারেন এখানে: http://deeplearning.net/software/theano/tutorial/conv_arithmetic.html

  • বৈধ বা কোনও প্যাডিং নয়:

বৈধ প্যাডিংয়ে কোনও শূন্য প্যাডিং জড়িত না, তাই এটি কৃত্রিমভাবে উত্পন্ন জিরোগুলি সহ না করে কেবলমাত্র বৈধ ইনপুটটি কভার করে। কার্নেল আকারের k এর জন্য যদি স্ট্রাইড s = 1 হয় তবে আউটপুটটির দৈর্ঘ্য ((ইনপুটের দৈর্ঘ্য) - (কে-1)) হয়।

  • একই বা অর্ধ প্যাডিং:

S = 1 হলে একই প্যাডিং আউটপুটগুলির আকার একই হয় p যদি s = 1, জিরো প্যাডের সংখ্যা (কে -1)।

  • পূর্ণ প্যাডিং:

পূর্ণ প্যাডিংয়ের অর্থ হ'ল কার্নেলটি পুরো ইনপুটগুলির উপর দিয়ে চলেছে, তাই শেষ প্রান্তে, কার্নেলটি কেবলমাত্র একটি ইনপুট এবং অন্য শূন্যগুলি পূরণ করতে পারে। S = 1 হলে জিরো প্যাডের সংখ্যা 2 (কে -1)। S = 1 হলে আউটপুটটির দৈর্ঘ্য ((ইনপুটের দৈর্ঘ্য) + (কে-1)) হয়।

অতএব, প্যাডিংয়ের সংখ্যা: (বৈধ) <= (একই) <= (পূর্ণ)


8

প্যাডিং চালু / বন্ধ। আপনার ইনপুটটির কার্যকর আকার নির্ধারণ করে।

VALID:কোন প্যাডিং নেই। কনভলিউশন ইত্যাদি ওপ্সগুলি কেবলমাত্র "বৈধ" স্থানে সঞ্চালিত হয়, যেমন আপনার টেনসরের সীমানার খুব কাছে নয়।
3x3 এর কার্নেল এবং 10x10 এর চিত্র সহ, আপনি সীমানার অভ্যন্তরে 8x8 অঞ্চলটিতে সমাবর্তন সম্পাদন করবেন।

SAME:প্যাডিং সরবরাহ করা হয়। যখনই আপনার অপারেশনটি কোনও প্রতিবেশের উল্লেখ করে (যত বড়ই হোক না কেন) শূন্য মানগুলি সরবরাহ করা হয় যখন সেই পাড়াটি মূল সেন্সরের বাইরে প্রসারিত হয় যাতে সেই অপারেশনটি সীমান্তের মানগুলিতেও কাজ করতে দেয়।
3x3 এর কার্নেল এবং 10x10 এর চিত্র সহ, আপনি পুরো 10x10 অঞ্চলটিতে সমাবর্তন সম্পাদন করবেন।


8

ভ্যালিড প্যাডিং: এটি শূন্য প্যাডিং সহ। আশা করি কোনও বিভ্রান্তি নেই।

x = tf.constant([[1., 2., 3.], [4., 5., 6.],[ 7., 8., 9.], [ 7., 8., 9.]])
x = tf.reshape(x, [1, 4, 3, 1])
valid_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='VALID')
print (valid_pad.get_shape()) # output-->(1, 2, 1, 1)

একই প্যাডিং: এটি প্রথমে বুঝতে অসুবিধাজনক কারণ সরকারী ডক্সে উল্লিখিত হিসাবে আমাদের দুটি বিষয় পৃথকভাবে বিবেচনা করতে হবে ।

আসুন হিসাবে আউটপুট, আউটপুট হিসাবে , প্যাডিং হিসাবে , স্ট্রাইড হিসাবে এবং কার্নেলের আকার হিসাবে গ্রহণ করা যাক (কেবলমাত্র একটি একক মাত্রা বিবেচনা করা হয়)

কেস 01 :

কেস 02 :

এমন গণনা করা হয় যে সর্বনিম্ন মান যা প্যাডিংয়ের জন্য নেওয়া যেতে পারে। যেহেতু এর মান জানা যায়, এই সূত্রটি ব্যবহার করে এর মান পাওয়া যায়

আসুন এই উদাহরণটি কাজে লাগান:

x = tf.constant([[1., 2., 3.], [4., 5., 6.],[ 7., 8., 9.], [ 7., 8., 9.]])
x = tf.reshape(x, [1, 4, 3, 1])
same_pad = tf.nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], padding='SAME')
print (same_pad.get_shape()) # --> output (1, 2, 2, 1)

এখানে x এর মাত্রা (3,4)। তারপরে যদি অনুভূমিক দিকটি নেওয়া হয় (3):

যদি আক্ষরিক দিকটি নেওয়া হয় (4):

আশা করি এটি কীভাবে টিএফ এ একই প্যাডিং কাজ করে তা বুঝতে সহায়তা করবে ।


7

এখানে ব্যাখ্যাটির উপর ভিত্তি করে এবং ত্রিস্তানের উত্তর অনুসরণ করে আমি সাধারণত তাত্পর্যপূর্ণ পরীক্ষার জন্য এই দ্রুত কাজগুলি ব্যবহার করি।

# a function to help us stay clean
def getPaddings(pad_along_height,pad_along_width):
    # if even.. easy..
    if pad_along_height%2 == 0:
        pad_top = pad_along_height / 2
        pad_bottom = pad_top
    # if odd
    else:
        pad_top = np.floor( pad_along_height / 2 )
        pad_bottom = np.floor( pad_along_height / 2 ) +1
    # check if width padding is odd or even
    # if even.. easy..
    if pad_along_width%2 == 0:
        pad_left = pad_along_width / 2
        pad_right= pad_left
    # if odd
    else:
        pad_left = np.floor( pad_along_width / 2 )
        pad_right = np.floor( pad_along_width / 2 ) +1
        #
    return pad_top,pad_bottom,pad_left,pad_right

# strides [image index, y, x, depth]
# padding 'SAME' or 'VALID'
# bottom and right sides always get the one additional padded pixel (if padding is odd)
def getOutputDim (inputWidth,inputHeight,filterWidth,filterHeight,strides,padding):
    if padding == 'SAME':
        out_height = np.ceil(float(inputHeight) / float(strides[1]))
        out_width  = np.ceil(float(inputWidth) / float(strides[2]))
        #
        pad_along_height = ((out_height - 1) * strides[1] + filterHeight - inputHeight)
        pad_along_width = ((out_width - 1) * strides[2] + filterWidth - inputWidth)
        #
        # now get padding
        pad_top,pad_bottom,pad_left,pad_right = getPaddings(pad_along_height,pad_along_width)
        #
        print 'output height', out_height
        print 'output width' , out_width
        print 'total pad along height' , pad_along_height
        print 'total pad along width' , pad_along_width
        print 'pad at top' , pad_top
        print 'pad at bottom' ,pad_bottom
        print 'pad at left' , pad_left
        print 'pad at right' ,pad_right

    elif padding == 'VALID':
        out_height = np.ceil(float(inputHeight - filterHeight + 1) / float(strides[1]))
        out_width  = np.ceil(float(inputWidth - filterWidth + 1) / float(strides[2]))
        #
        print 'output height', out_height
        print 'output width' , out_width
        print 'no padding'


# use like so
getOutputDim (80,80,4,4,[1,1,1,1],'SAME')

6

মোট কথা, 'বৈধ' প্যাডিং মানে প্যাডিং নেই। কনফিউশনাল স্তরের আউটপুট আকার ইনপুট আকার এবং কার্নেলের আকারের উপর নির্ভর করে সঙ্কুচিত হয়।

বিপরীতে, 'একই' প্যাডিং অর্থ প্যাডিং ব্যবহার করা। যখন স্ট্রাইডটি 1 হিসাবে সেট করা হয়, কনভ্যুশনাল লেয়ারের আউটপুট আকার কনভোলিউশন গণনার সময় ইনপুট ডেটার চারপাশে একটি নির্দিষ্ট সংখ্যক '0-বর্ডার' যুক্ত করে ইনপুট আকার হিসাবে বজায় রাখে।

আশা করি এই স্বজ্ঞাত বিবরণটি সহায়তা করবে।


5

সাধারণ সূত্র

এখানে, ডাব্লু এবং এইচ হ'ল ইনপুটটির প্রস্থ এবং উচ্চতা, এফ ফিল্টার মাত্রা, পি প্যাডিং আকার (অর্থাত্ প্যাড করার মতো সারি বা কলামের সংখ্যা)

একই প্যাডিংয়ের জন্য:

একই প্যাডিং

ভাল্ড প্যাডিংয়ের জন্য:

ভাল প্যাডিং


2

YvesgereY এর দুর্দান্ত উত্তরের পরিপূরক করে আমি এই দৃশ্যটিকে অত্যন্ত সহায়ক বলে মনে করেছি:

প্যাডিং ভিজ্যুয়ালাইজেশন

প্যাডিং ' বৈধ ' প্রথম চিত্র। ফিল্টার উইন্ডোটি চিত্রের অভ্যন্তরে থাকে।

প্যাডিং ' একই ' তৃতীয় চিত্র। আউটপুট একই আকার।


এটি এই নিবন্ধে পাওয়া গেছে ।


0

টেনসরফ্লো ২.০ সামঞ্জস্যপূর্ণ উত্তর : উপরে "বৈধ" এবং "একই" প্যাডিং সম্পর্কে বিশদ বিবরণ সরবরাহ করা হয়েছে।

তবে আমি Tensorflow 2.x (>= 2.0)সম্প্রদায়ের সুবিধার জন্য বিভিন্ন পুলিং ফাংশন এবং তাদের সম্পর্কিত কমান্ডগুলিতে নির্দিষ্ট করব ।

1.x এ কার্য :

tf.nn.max_pool

tf.keras.layers.MaxPool2D

Average Pooling => None in tf.nn, tf.keras.layers.AveragePooling2D

2.x এ কার্য :

tf.nn.max_poolযদি 2.x এবং যদি ব্যবহার করা হয় , tf.compat.v1.nn.max_pool_v2বা tf.compat.v2.nn.max_poolযদি 1.x থেকে 2.x এ স্থানান্তরিত হয়

tf.keras.layers.MaxPool2D যদি 2.x এবং তে ব্যবহৃত হয়

tf.compat.v1.keras.layers.MaxPool2Dবা tf.compat.v1.keras.layers.MaxPooling2Dবা tf.compat.v2.keras.layers.MaxPool2Dবা tf.compat.v2.keras.layers.MaxPooling2D, 1.x থেকে 2.x. চলে আসেন যদি

Average Pooling => tf.nn.avg_pool2dঅথবা tf.keras.layers.AveragePooling2Dযদি টিএফ 2.x এবং

tf.compat.v1.nn.avg_pool_v2বা tf.compat.v2.nn.avg_poolবা tf.compat.v1.keras.layers.AveragePooling2Dবা tf.compat.v1.keras.layers.AvgPool2Dবা tf.compat.v2.keras.layers.AveragePooling2Dবা tf.compat.v2.keras.layers.AvgPool2D, যদি 1.x থেকে 2.x এ স্থানান্তরিত হয়

টেনসরফ্লো 1.x থেকে 2.x এ স্থানান্তর সম্পর্কে আরও তথ্যের জন্য, দয়া করে এই স্থানান্তর গাইডটি পড়ুন ।

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