সিএনএন-তে, প্রতিটি নতুন ফিল্টারটির প্রতিটি ইনপুট চ্যানেলের জন্য আলাদা ওজন থাকে, বা প্রতিটি ফিল্টারের একই ওজন কি ইনপুট চ্যানেল জুড়ে ব্যবহৃত হয়?


28

আমার বোধগম্যতা হল যে কনভ্যুশনাল নিউরাল নেটওয়ার্কের কনভ্যুশনাল স্তরটির চারটি মাত্রা রয়েছে: ইনপুট_চ্যানেলস, ফিল্টার_ উচ্চতা, ফিল্টার_উইথ, নম্বর_ফ_ ফিল্টার। তদ্ব্যতীত, এটি আমার বোঝা যায় যে প্রতিটি নতুন ফিল্টার কেবলমাত্র সমস্ত ইনপুট_চ্যানেলগুলিতে (বা পূর্ববর্তী স্তর থেকে বৈশিষ্ট্য / অ্যাক্টিভেশন মানচিত্র) সংশ্লেষিত হয়।

তবুও, সিএস 231 এর নীচের গ্রাফিকটিতে প্রতিটি ফিল্টারকে (লাল রঙের) চ্যানেল জুড়ে একই ফিল্টারটি ব্যবহার করার পরিবর্তে একটি সিঙ্গল চ্যানেলটিতে প্রয়োগ করা হচ্ছে দেখানো হয়েছে। এটি ইঙ্গিত করে যে প্রতিটি চ্যানেলের জন্য পৃথক ফিল্টার রয়েছে (এই ক্ষেত্রে আমি ধরে নিচ্ছি যে তারা কোনও ইনপুট চিত্রের তিনটি রঙিন চ্যানেল, তবে এটি সমস্ত ইনপুট চ্যানেলের ক্ষেত্রে প্রযোজ্য হবে)।

এটি বিভ্রান্তিকর - প্রতিটি ইনপুট চ্যানেলের জন্য আলাদা আলাদা ফিল্টার রয়েছে?

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

সূত্র: http://cs231n.github.io/convolutional-networks/

উপরের চিত্রটি ওরিলির "ডিপ লার্নিংয়ের ফান্ডামেন্টালস" এর একটি সংবাদের সাথে বিরোধী বলে মনে হচ্ছে :

"... ফিল্টারগুলি কেবল একটি বৈশিষ্ট্য মানচিত্রের উপরেই কাজ করে না They এগুলি বৈশিষ্ট্য মানচিত্রের পুরো ভলিউমকে চালিত করে যা একটি নির্দিষ্ট স্তরে উত্পন্ন হয়েছে ... ফলস্বরূপ, বৈশিষ্ট্য মানচিত্রগুলি অবশ্যই ভলিউমগুলিতে পরিচালনা করতে সক্ষম হবে, শুধু অঞ্চল "

... এছাড়াও, এটি আমার বোঝার যে নীচে এই চিত্রগুলি একটি নির্দেশ করে একই ফিল্টার যা কেবলমাত্র তিনটি ইনপুট চ্যানেলগুলিতে (উপরের সিএস 231 গ্রাফিকের মধ্যে যা দেখানো হয়েছে তার বিরোধী)

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

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


উত্তর:


13

কনভোলশনাল নিউরাল নেটওয়ার্কে কি আছে? প্রতিটি ইনপুট চ্যানেলের জন্য কি অনন্য ফিল্টার রয়েছে বা সমস্ত ইনপুট চ্যানেলগুলিতে একই নতুন ফিল্টার ব্যবহার করা হয়?

সাবেক. আসলে প্রতিটি ইনপুট চ্যানেল / আউটপুট চ্যানেলের সংমিশ্রণের জন্য আলাদা আলাদা কার্নেল সংজ্ঞায়িত করা হয়।

সাধারণত কোনও সিএনএন আর্কিটেকচারের জন্য, আপনার দ্বারা বর্ণিত একটি একক ফিল্টারে number_of_filters পরামিতি প্রতি ইনপুট চ্যানেলটিতে একটি 2 ডি কার্নেল থাকে। আছে input_channels * number_of_filtersওজন সেট, যার প্রতিটি একটি সংবর্তন কার্নেল বর্ণনা করে। সুতরাং প্রতিটি ফিল্টারের জন্য প্রতি ইনপুট চ্যানেলের ওজনের একটি সেট দেখাচ্ছে ডায়াগ্রামগুলি সঠিক। প্রথম চিত্রটিও পরিষ্কারভাবে দেখায় যে এই কার্নেলগুলি প্রয়োগের ফলাফলগুলি সংযুক্ত করে এবং প্রতিটি আউটপুট চ্যানেলের জন্য পক্ষপাত যোগ করে মিলিত হয়।

এটিকে প্রতিটি আউটপুট চ্যানেলের জন্য 3 ডি কনভোলিউশন ব্যবহার করেও দেখা যেতে পারে, এর ফলে ইনপুটটির মতোই গভীরতা থাকে। আপনার দ্বিতীয় চিত্রটি কোনটি প্রদর্শিত হচ্ছে এবং অনেক লাইব্রেরি অভ্যন্তরীণভাবে কী করবে। গাণিতিকভাবে এটি একই ফলাফল (গভীরতার সাথে হুবহু মিল মেলে), যদিও স্তর ধরণের সাধারণত "Conv2D" বা অনুরূপ হিসাবে লেবেল থাকে। একইভাবে যদি আপনার ইনপুট প্রকারটি অন্তঃসত্ত্বিকভাবে 3D হয় যেমন ভক্সেল বা একটি ভিডিও, তবে আপনি একটি "কনভ 3 ডি" স্তর ব্যবহার করতে পারেন তবে অভ্যন্তরীণভাবে এটি 4 ডি কনভোলজ হিসাবে কার্যকর করা যেতে পারে।


এই ব্যাখ্যা জন্য ধন্যবাদ। মনে হচ্ছে প্রতিটি ফিল্টারে আসলে বিভিন্ন ওজনinput_channels সহ ভার্সনের সংখ্যা রয়েছে । আপনার কাছে এমন কোনও "অফিসিয়াল" উত্স আছে যা এই বোঝার বিষয়টি নিশ্চিত করে?
রায়ান চেজ

@ রায়ানচেস: হ্যাঁ এটি সঠিক। : - আমি শুধু CNNs উপর অ্যান্ড্রু এনজি এর কোর্স এ নির্দেশ করবে কিভাবে রঙ ইমেজ প্রসেস করা হবে এখানে শুরু coursera.org/learn/convolutional-neural-networks/lecture/ctQZz/...
নিল স্লেটার

আমি লক্ষ করতে চাই যে, সেই উত্সটিতে ( cs231n.github.io/convolutional- নেট ওয়ার্কস ) ফিল্টারগুলি (ওজন বা কর্নেল) খণ্ড (অর্থাত্ 3-মাত্রিক), এবং তাদের একই তৃতীয় মাত্রাটির ইনপুটটির একটি রয়েছে ভলিউম। তদতিরিক্ত, এখন যেমন এটি উত্সটিতে বলা হয়েছে (কমপক্ষে), ইনপুট ভলিউমে ফিল্টারটির আরও ভাল প্রয়োগের জন্য ভলিউমগুলি তৃতীয় মাত্রা জুড়ে টুকরো টুকরো করা হয়েছে। আমি মনে করি না, সাধারণভাবে, "প্রতিটি ইনপুট চ্যানেল / আউটপুট চ্যানেলের সংমিশ্রণের জন্য আলাদা আলাদা কার্নেল সংজ্ঞায়িত করা হয়" " সঠিক.
এনবিরো

নোট করুন যে ফিল্টারগুলি (বা কার্নেলগুলি) এমন ওজন যা শিখতে হবে (যেমন সেগুলি স্থির নয়, তবে তারা আসলে সিএনএনের পরামিতি)। এটি হতে পারে যে তারা (অর্থাত্ ফিল্টারের টুকরো), তৃতীয় মাত্রা জুড়ে একই।
এনবিরো

@ এনব্রো: হ্যাঁ আপনি চ্যানেলের সংখ্যার মতো কার্নেলের গভীরতার সাথে একক 3 ডি রূপান্তর হিসাবে একাধিক 2D স্লাইস জুড়ে একটি 2D কনভোলশনটি প্রয়োগ করতে পারেন । গাণিতিকভাবে এটি আমার বর্ণনার সাথে অভিন্ন। আপনি এটিকে ভাগ করে নেওয়া ওজনের সাথে কাটা পুরোপুরি সংযুক্ত ফিড ফরোয়ার্ড নেটওয়ার্ক হিসাবে দেখতে পারেন (যার অনেকগুলি শূন্য)। এই উত্তরটি 2D ফিল্টারগুলির দর্শন কীসের উপর দৃষ্টি নিবদ্ধ করে, কারণ 2 ডি ফিল্টারগুলি কীভাবে সাজানো হয়েছে সে সম্পর্কে ওপি জিজ্ঞাসা করছে। এগুলি প্রকৃতপক্ষে একটি বৃহত্তর 3 ডি কার্নেলের সাথে সাজানো যেতে পারে তবে 3 ডি কনভোলশন সমতুল্য "ট্রিক" ব্যবহার করে তারা এখনও 2 ডি কার্নেল হিসাবে প্রয়োগ করা হয়।
নিল স্লেটার

12

নীচের ছবিটি আপনি আপনার প্রশ্নে ব্যবহার করেছেন, যা ঘটছে তা খুব নির্ভুলভাবে বর্ণনা করে। মনে রাখবেন যে 3 ডি ফিল্টার (ধূসর ঘনক) এর প্রতিটি উপাদান একটি আলাদা মান ( 3x3x3=27মান) দিয়ে তৈরি। সুতরাং, তিনটি ভিন্ন 2D ফিল্টার আকারের 3x3এই এক গঠনের ঘনিভূত যাবে 3D ফিল্টার আকারের 3x3x3

convnet2D

3x3x3ছবি থেকে আরজিবি খণ্ড গুন করা হয় elementwise একটি দ্বারা 3D ফিল্টার (ধূসর হিসাবে দেখানো)। এই ক্ষেত্রে, ফিল্টারটির 3x3x3=27ওজন রয়েছে। যখন এই ওজনগুলি গুণগত উপাদান অনুসারে গুণিত হয় এবং তারপরে সংক্ষিপ্ত করা হয়, তখন এটি একটি মান দেয়।


সুতরাং, প্রতিটি ইনপুট চ্যানেলের জন্য আলাদা ফিল্টার রয়েছে?

হ্যাঁ , ছবিতে ইনপুট চ্যানেলের সংখ্যা হিসাবে অনেকগুলি 2 ডি ফিল্টার রয়েছেতবে , আপনি যদি মনে করেন যে একাধিক চ্যানেলের ইনপুট ম্যাট্রিকের জন্য, কেবলমাত্র একটি 3 ডি ফিল্টার রয়েছে (উপরের চিত্রটিতে দেখানো হয়েছে)।


তাহলে কেন এটি 2D কনভ্যুশন বলা হয় (যদি ফিল্টার 3 ডি হয় এবং ইনপুট ম্যাট্রিক্স 3 ডি হয়)?

এটি 2D সমান্তরাল কারণ ফিল্টারটির স্ট্রাইডগুলি কেবল উচ্চতা এবং প্রস্থের মাত্রা ( গভীরতা নয় ) বরাবর থাকে এবং সুতরাং, এই সমঝোতার দ্বারা উত্পাদিত আউটপুটটিও 2 ডি ম্যাট্রিক্স। ফিল্টারটির চলাফেরার দিকনির্দেশের সংখ্যা সমাবর্তনের মাত্রা নির্ধারণ করে।

দ্রষ্টব্য: আপনি যদি একাধিক 2D ফিল্টার (প্রতিটি স্তরের জন্য একটি) এর পরিবর্তে একটি একক 3 ডি ফিল্টারটি কল্পনা করে নিজের বোঝাপড়া তৈরি করেন , তবে আপনার কাছে রেসনেট, ইনসেপশনভি 3 ইত্যাদির মতো উন্নত সিএনএন আর্কিটেকচার বোঝার সহজ সময় থাকবে will


এটি একটি ভাল ব্যাখ্যা, তবে আরও স্পষ্টতই আমি যে প্রশ্নটি বোঝার চেষ্টা করছি তা হ'ল প্রতিটি ইনপুট চ্যানেলে যে ফিল্টারগুলি চালিত হয় সেগুলি একই ওজনগুলির অনুলিপি বা সম্পূর্ণ আলাদা ওজনের whether এটি আসলে চিত্রটিতে প্রদর্শিত হয় নি এবং আসলে আমার কাছে চিত্রের ধরণের প্রস্তাব দেয় যে এটি প্রতিটি চ্যানেলে একই ওজন প্রয়োগ করা হয় (তাদের একই রঙের কারণে) ... প্রতি @ নীল স্লটারের উত্তর, এটি প্রতিটি মত লাগে ফিল্টার আসলে বিভিন্ন ওজন input_channelsসহ সংস্করণ সংখ্যা আছে । যদি এটিও আপনার বোঝাপড়া হয়, তবে কোনও "অফিসিয়াল" উত্স এটির নিশ্চয়তা দিচ্ছে?
রায়ান চেস

হ্যাঁ, সত্যই, এটি আমার বোধগম্যও। আমার জন্য, এটি স্পষ্ট ছিল যখন আমি সেই ধূসর ঘনকটি 27 টি বিভিন্ন ওজনের মান দ্বারা গঠিত বলে ভাবার চেষ্টা করেছি । এর অর্থ হ'ল প্রতিটি ইনপুট স্তরের পরিবর্তে একই 3 ডি 2 ফিল্টার প্রয়োগ করা হয় 3 টি পৃথক 2 ডি ফিল্টার।
মহসিন বুখারী

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

আপনি যদি টেনসরফ্লো পথ অনুসরণ করেন। আপনার ডামি সিএনএন স্তরটিকে একটি ইনপুট নমুনা দেখানোর পরে আপনি আপনার ওজন ফিল্টারটি মুদ্রণ করতে পারেন।
মহসিন বুখারী

@ মোছসিন বুখারী আমি অবশ্যই টেনসরফ্লোয়ের মধ্যে ফিল্টারগুলি অন্বেষণ করার চেষ্টা করব। ফিল্টারগুলির মধ্যে কী রয়েছে তা অন্বেষণ সম্পর্কে আপনি কীভাবে নিজের কোডটি ভাগ করে নিতে চান? আপনি উদাহরণস্বরূপ নেটওয়ার্কের প্রতিটি পদক্ষেপে ফিল্টারটির মানগুলি মুদ্রণ করতে সক্ষম হন?
রায়ান চেজ

3

আমি যথাযথভাবে ইনপুট এবং আউটপুট চ্যানেল এবং ওজনগুলির সাথে সম্মতি কীভাবে কাজ করে তা আরও স্পষ্ট করার প্রত্যাশায় একটি দৃ concrete় উদাহরণ সহ উত্তরগুলির অনুসরণ করছি:

উদাহরণটি নিম্নরূপ হতে দিন (1 টি সমঝোতার স্তর থেকে রিট):

  • ইনপুট টেনসর 9x9x5, অর্থাৎ 5 ইনপুট চ্যানেল, তাই input_channels=5
  • ফিল্টার / কার্নেলের আকার 4x4 এবং স্ট্রাইড 1 হয়
  • আউটপুট টেনসর 6x6x56, অর্থাৎ 56 আউটপুট চ্যানেল, তাই output_channels=56
  • প্যাডিংয়ের ধরণটি 'ভ্যালিড' (অর্থাত্ কোনও প্যাডিং নয়) is

আমরা লিখে রাখলাম:

  • ইনপুটটিতে যেহেতু 5 টি চ্যানেল রয়েছে তাই ফিল্টারের মাত্রা 4x4x5 হয়ে যায়, অর্থাত 4x4 আকারের পৃথক, অনন্য 2D ফিল্টার রয়েছে (অর্থাত প্রতিটির 16 টি ওজন রয়েছে); আকার 9x9x5 আকারের ইনপুটটিকে বোঝাতে ফিল্টার 3 ডি হয়ে যায় এবং অবশ্যই 4x4x5 আকারের হতে হবে
  • সুতরাং: প্রতিটি ইনপুট চ্যানেলের জন্য, প্রতিটি পৃথক 16 টি ওজন সহ একটি পৃথক 2 ডি ফিল্টার রয়েছে। অন্য কথায়, 2 ডি ফিল্টারগুলির সংখ্যা ইনপুট চ্যানেলের সংখ্যার সাথে মেলে
  • যেহেতু 56 আউটপুট চ্যানেল রয়েছে, তাই অবশ্যই 4 ত্রিমাত্রিক ফিল্টার W0, W1, ..., 4x4x5 আকারের ডাব্লু 55 থাকতে হবে (সিএস 231 গ্রাফিকটিতে সিফ 231 গ্রাফিকটিতে 2 টি-মাত্রিক ফিল্টার রয়েছে ডাব্লু 0, ডাব্লু 1 2 আউটপুট হিসাবে গণ্য হবে) চ্যানেল), যেখানে 5 মাপের তৃতীয় মাত্রা 5 ইনপুট চ্যানেলের লিঙ্ক উপস্থাপন করে (সিএস 231 গ্রাফিকের প্রতিটি 3 ডি ফিল্টার ডাব্লু 0, ডাব্লু 1 এর 3 য় মাত্রা 3 থাকে, যা 3 ইনপুট চ্যানেলের সাথে মেলে)
  • অতএব: 3 ডি ফিল্টারগুলির সংখ্যা আউটপুট চ্যানেলের সংখ্যার সমান

এই সমাবর্তন স্তরটিতে এইভাবে রয়েছে:

56 টি আউটপুট চ্যানেলগুলির জন্য অ্যাকাউন্টে 4x4x5 আকারের 4 টি-মাত্রিক ফিল্টার (প্রতিটি = 80 টি পৃথক ওজন) প্রতিটি যেখানে 5 টি ইনপুট চ্যানেলগুলির সাথে মিলিত করার জন্য 5 তৃতীয় মাত্রার মান রয়েছে। মোট আছে

number_of_filters=input_channel*output_channels=5*56=280

4x4 আকারের 2D ফিল্টার (মোট 280x16 বিভিন্ন ওজন)।


0

কেবলমাত্র 2 ডি তে সীমাবদ্ধতা রয়েছে। কেন?

সম্পূর্ণ সংযুক্ত স্তরটি কল্পনা করুন।

এটি দুর্দান্তভাবে বিশাল হবে, প্রতিটি নিউরন সম্ভবত 1000x1000x3 ইনপুট নিউরনের সাথে সংযুক্ত হবে। তবে আমরা জানি যে কাছাকাছি পিক্সেল প্রক্রিয়াজাতকরণটি বোধগম্য, সুতরাং আমরা নিজেদেরকে একটি ছোট 2 ডি-পাড়াতে সীমাবদ্ধ করি, তাই প্রতিটি নিউরন 2 ডি-তে নিউরনের কাছে কেবল একটি 3x3 এর সাথে সংযুক্ত থাকে। আমরা চ্যানেলগুলি সম্পর্কে এই জাতীয় জিনিস জানি না, তাই আমরা সমস্ত চ্যানেলের সাথে সংযুক্ত করি।

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


0

Http://cs231n.github.io/convolutional-networks/ এবং স্লাইড 7-18 এ "স্থানীয় সংযোগ" বিভাগটি দেখুন ।

ফিল্টারটির "রিসেপটিভ ফিল্ড" হাইপারপ্যারামিটার কেবল উচ্চতা এবং প্রস্থ দ্বারা সংজ্ঞায়িত করা হয়, কারণ স্তরটির গভীরতার পূর্ববর্তী দ্বারা গভীরতা স্থির করা হয়।

দ্রষ্টব্য যে "গভীরতার অক্ষের সাথে সংযোগের পরিমাণ সর্বদা ইনপুট ভলিউমের DEPTH এর সমান" - অথবা অ্যাক্টিভেশন মানচিত্রের ডেপথ (পরবর্তী স্তরগুলির ক্ষেত্রে)।

স্বজ্ঞাতভাবে, এটি অবশ্যই চিত্র চ্যানেলগুলির ডেটা ইন্টারলিভড, প্ল্যানার নয় এর কারণে হওয়া উচিত। এইভাবে, ফিল্টার প্রয়োগ করা সহজভাবে কলাম ভেক্টরগুলি গুণ দ্বারা অর্জন করা যেতে পারে।

নোট করুন যে কনভোলিউশনাল নেটওয়ার্ক সমস্ত ফিল্টার প্যারামিটারগুলি (গভীরতার মাত্রা সহ) শেখে এবং সেগুলি মোট "h w ইনপুট_লেয়ার_ডেপথ + 1 (পক্ষপাত)"।


0

আমি আমার মাস্টার্স থিসিসের 2.2.1 অধ্যায়টি সুপারিশ করি উত্তর হিসাবে । অবশিষ্ট উত্তর যুক্ত করতে:

কী হয় তা বুঝতে কেরাস আপনার বন্ধু:

from keras.models import Sequential
from keras.layers import Conv2D

model = Sequential()
model.add(Conv2D(32, input_shape=(28, 28, 3),
          kernel_size=(5, 5),
          padding='same',
          use_bias=False))
model.add(Conv2D(17, (3, 3), padding='same', use_bias=False))
model.add(Conv2D(13, (3, 3), padding='same', use_bias=False))
model.add(Conv2D(7, (3, 3), padding='same', use_bias=False))
model.compile(loss='categorical_crossentropy', optimizer='adam')

print(model.summary())

দেয়

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 28, 28, 32)        2400      
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 28, 28, 17)        4896      
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 28, 28, 13)        1989      
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 28, 28, 7)         819       
=================================================================
Total params: 10,104

আপনার বিকল্পগুলি প্রণয়ন করার চেষ্টা করুন। প্যারামিটারগুলির অর্থ কী হবে যদি অন্য কিছু হয়?

2400=32(355)

এই পদ্ধতির সাহায্যে আপনাকে কেবল স্তরীয় স্তরগুলি নয়, অন্যান্য স্তর প্রকারেও সহায়তা করে।

দয়া করে নোট করুন যে আপনি বিভিন্ন সমাধান প্রয়োগ করতে মুক্ত, এতে অন্যান্য সংখ্যক পরামিতি থাকতে পারে।


0

কেবল দুটি বিবরণ একেবারে পরিষ্কার করতে:

এনএন3×3এন2এন 2 ডি স্তরগুলির , কীভাবে তারা একত্রিত হয়?

এটি প্রায় প্রতিটি প্রকাশনায় আমি দেখেছি, তবে এটির মূল ধারণাটি হ'ল এন2 2D আউটপুট চ্যানেলগুলি একে অপরের সাথে ইন্টারলিভড করে ফর্মটি তৈরি করে এনএকসাথে যোগ করার আগে আউটপুট চ্যানেলগুলি, বদলানো কার্ড ডেকের মতো channels এই সমস্ত যৌক্তিক যখন আপনি বুঝতে পারেন যে কোনও কনভোলজের চ্যানেল মাত্রা বরাবর (যা কখনই চিত্রিত হয় না), আপনার আসলে একটি সম্পূর্ণ সংযুক্ত স্তর রয়েছে! প্রতিটি ইনপুট 2 ডি চ্যানেল, একটি অনন্য দ্বারা গুণিত3×3ফিল্টার, একক আউটপুট চ্যানেলে 2D আউটপুট স্তর অবদান রাখে। একবার সংযুক্ত হয়ে গেলে, প্রতিটি আউটপুট স্তর প্রতিটি ইনপুট স্তরের সংমিশ্রণ×একটি অনন্য ফিল্টার। এটি সকল অবদানের জন্য একটি সর্বাত্মক।

এ সম্পর্কে নিজেকে বোঝানোর সহজতম উপায় হ'ল অন্যান্য পরিস্থিতিতে কী ঘটেছিল তা কল্পনা করা এবং দেখুন যে গণনাটি অধঃপতিত হয়ে পড়েছে - এটি হ'ল যদি আপনি আন্তঃলিখন এবং ফলাফলগুলি পুনরায় সংযুক্ত না করেন, তবে ভিন্ন ফলাফলগুলি আসলে কিছুই করতে পারে না - তারা সম্মিলিত ওজন সহ একক আউটপুট হিসাবে একই প্রভাব ফেলবে।


0

প্রত্যয়গুলি কীভাবে গণনা করা হয় তা বোঝার চেষ্টা করার জন্য, পাই্টোর্চে একটি দরকারী কোড স্নিপেট এখানে:

batch_size = 1
height = 3 
width = 3
conv1_in_channels = 2
conv1_out_channels = 2
conv2_out_channels = 2
kernel_size = 2
# (N, C_in, H, W) is shape of all tensors. (batch_size, channels, height, width)
input = torch.Tensor(np.arange(0, batch_size*height*width*in_channels).reshape(batch_size, in_channels, height, width))
conv1 = nn.Conv2d(in_channels, conv1_out_channels, kernel_size, bias=False) # no bias to make calculations easier
# set the weights of the convolutions to make the convolutions easier to follow
nn.init.constant_(conv1.weight[0][0], 0.25)
nn.init.constant_(conv1.weight[0][1], 0.5)
nn.init.constant_(conv1.weight[1][0], 1) 
nn.init.constant_(conv1.weight[1][1], 2) 
out1 = conv1(input) # compute the convolution

conv2 = nn.Conv2d(conv1_out_channels, conv2_out_channels, kernel_size, bias=False)
nn.init.constant_(conv2.weight[0][0], 0.25)
nn.init.constant_(conv2.weight[0][1], 0.5)
nn.init.constant_(conv2.weight[1][0], 1) 
nn.init.constant_(conv2.weight[1][1], 2) 
out2 = conv2(out1) # compute the convolution

for tensor, name in zip([input, conv1.weight, out1, conv2.weight, out2], ['input', 'conv1', 'out1', 'conv2', 'out2']):
    print('{}: {}'.format(name, tensor))
    print('{} shape: {}'.format(name, tensor.shape))

এটি চালানো নিম্নলিখিত আউটপুট দেয়:

input: tensor([[[[ 0.,  1.,  2.],
          [ 3.,  4.,  5.],
          [ 6.,  7.,  8.]],

         [[ 9., 10., 11.],
          [12., 13., 14.],
          [15., 16., 17.]]]])
input shape: torch.Size([1, 2, 3, 3])
conv1: Parameter containing:
tensor([[[[0.2500, 0.2500],
          [0.2500, 0.2500]],

         [[0.5000, 0.5000],
          [0.5000, 0.5000]]],


        [[[1.0000, 1.0000],
          [1.0000, 1.0000]],

         [[2.0000, 2.0000],
          [2.0000, 2.0000]]]], requires_grad=True)
conv1 shape: torch.Size([2, 2, 2, 2])
out1: tensor([[[[ 24.,  27.],
          [ 33.,  36.]],

         [[ 96., 108.],
          [132., 144.]]]], grad_fn=<MkldnnConvolutionBackward>)
out1 shape: torch.Size([1, 2, 2, 2])
conv2: Parameter containing:
tensor([[[[0.2500, 0.2500],
          [0.2500, 0.2500]],

         [[0.5000, 0.5000],
          [0.5000, 0.5000]]],


        [[[1.0000, 1.0000],
          [1.0000, 1.0000]],

         [[2.0000, 2.0000],
          [2.0000, 2.0000]]]], requires_grad=True)
conv2 shape: torch.Size([2, 2, 2, 2])
out2: tensor([[[[ 270.]],

         [[1080.]]]], grad_fn=<MkldnnConvolutionBackward>)
out2 shape: torch.Size([1, 2, 1, 1])

লক্ষ্য করুন যে কনভোলশনের প্রতিটি চ্যানেল সমস্ত পূর্ববর্তী চ্যানেলগুলির আউটপুটগুলির মধ্যে কী পরিমাণ যোগ করে।

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