ডিকনভোলিউশনাল স্তরগুলি কী কী?


187

আমি সম্প্রতি জোনাথন লং, ইভান শেলহামার, ট্রেভর ড্যারেলের লিখেছেন সম্পূর্ণ কনভলিউশনাল নেটওয়ার্কস ফর সেমেন্টিক সেগমেন্টেশন । "ডিকনভোলিউশনাল স্তরগুলি" কী করে / কীভাবে তারা কাজ করে তা আমি বুঝতে পারি না।

প্রাসঙ্গিক অংশটি হ'ল

3.3। আপসাম্পলিং পিছনের দিকে স্ট্রাইড কনভলিউশন

মোটা আউটপুটগুলি ঘন পিক্সেলের সাথে সংযুক্ত করার আরেকটি উপায় হ'ল আন্তঃসম্পাদন। উদাহরণস্বরূপ, সরল প্রতিটি আউটপুট a একটি লিনিয়ার মানচিত্রের দ্বারা নির্ধারণ করে যা কেবল ইনপুট এবং আউটপুট সেলগুলির আপেক্ষিক অবস্থানের উপর নির্ভর করে। এক অর্থে, ফ্যাক্টর সঙ্গে upsampling 1 / চ একটি ভগ্ন ইনপুট দীর্ঘ সঙ্গে সংবর্তন হয়। যেহেতু অবিচ্ছেদ্য, অবাস্ত্রের প্রাকৃতিক উপায় তাই পিছনের দিকের সমাবর্তন (কখনও কখনও ডিকনভোলিউশন বলা হয়) আউটপুট স্ট্রাইড সহ । এ জাতীয় ক্রিয়াকলাপ বাস্তবায়নের জন্য তুচ্ছ, কারণ এটি দৃ .়তার সাথে এগিয়ে এবং পিছনের দিকগুলিকে বিপরীত করে। f f fyij
fff
এইভাবে পিক্সেলওয়াই ক্ষতি থেকে ব্যাকপ্রসারণ দ্বারা শেষ-শেষের শেখার জন্য নেটওয়ার্কে ইনসাম্পলিং সঞ্চালিত হয়।
মনে রাখবেন যে এই জাতীয় স্তরের ডিকনভোলিউশন ফিল্টারটি ঠিক করার দরকার নেই (উদাহরণস্বরূপ, বিলিনিয়ার আপসম্পলিংয়ের জন্য), তবে শিখতে পারবেন। ডিকনভোলিউশন স্তরগুলির একটি স্ট্যাক এবং অ্যাক্টিভেশন ফাংশন এমনকি একটি ননলাইনার আপসাম্পলিং শিখতে পারে।
আমাদের পরীক্ষাগুলিতে আমরা দেখতে পাই যে ঘন ভবিষ্যদ্বাণী শেখার জন্য ইন-নেটওয়ার্ক আপসাম্পলিং দ্রুত এবং কার্যকর। আমাদের সেরা সেগমেন্টেশন আর্কিটেকচার অধ্যায় 4.2-এ সংশোধিত পূর্বাভাসের জন্য উপসম্পর্ক শিখতে এই স্তরগুলি ব্যবহার করে।

আমি মনে করি না যে আমি সত্যিই বুঝতে পেরেছি যে কনভোলশনাল স্তরগুলি কীভাবে প্রশিক্ষিত হয়।

আমি যেটা আমি বুঝতে পেরেছি তা হ'ল কার্নেল সাইজের সহ কনভ্যুসিভাল স্তরগুলি সাইজের ফিল্টার শিখবে । কার্নেল আকারের , স্ট্রাইড এবং ফিল্টারগুলির সাথে একটি কনভোলসিয়াল স্তর আউটপুট হবে মাত্রা । তবে, কনভোলশনাল স্তরগুলি শেখার কাজ কীভাবে হয় তা আমি জানি না। (আমি বুঝতে পারি যে সহজ এমএলপিগুলি গ্রেডিয়েন্ট বংশোদ্ভূত সহ কীভাবে শিখতে পারে, যদি এটি সাহায্য করে)কে × কে কে এস এন এন ইনপুট ম্লানkk×kksNnInput dims2n

সুতরাং যদি কনভোলজিকাল স্তরগুলি সম্পর্কে আমার বোঝা সঠিক হয় তবে কীভাবে এটি বিপরীত হতে পারে সে সম্পর্কে আমার কোনও ধারণা নেই।

ডিকনভোলিউশনাল স্তরগুলি বুঝতে কেউ আমাকে দয়া করে সহায়তা করতে পারেন?


3
এই ভিডিও বক্তৃতাটি ডিকনভোলিউশন / উপসাম্পলিংয়ের ব্যাখ্যা দেয়: youtu.be/ByjaPdWXKJ4?t=16m59s
user199309

6
এটি যে কারও পক্ষে কার্যকর হতে পারে আশা করে, টেনসরফ্লো (0.11) তে কীভাবে কনভলিউশন এবং ট্রান্সপোসড কনভোলশন ব্যবহার করা যায় তা অন্বেষণ করার জন্য আমি একটি নোটবুক তৈরি করেছি । সম্ভবত কিছু ব্যবহারিক উদাহরণ এবং পরিসংখ্যান থাকলে তারা কীভাবে কাজ করে তা বুঝতে আরও কিছুটা সহায়তা করতে পারে।
আকিরস

1
আমার জন্য, এই পৃষ্ঠাটি আমাকে আরও ভাল ব্যাখ্যা দিয়েছে এটি ডিকনভোলিউশন
টি.আন্টনি

এর কোনও প্যারামিটার না থাকায় পিছনের দিকের পুলিংয়ের মতো কী সামনের দিকটি স্যাম্পলিং করা হয় না?
কেন ফেহলিং

দ্রষ্টব্য: "ডিকনভোলিউশনাল স্তর" নামটি বিভ্রান্ত করছে কারণ এই স্তরটি ডিকনভোলিউশনটি সম্পাদন করে না
ব্যবহারকারী 76284

উত্তর:


209

ডিকনভোলিউশন স্তরটি অত্যন্ত দুর্ভাগ্যজনক নাম এবং পরিবর্তে এটি ট্রান্সপোজড কনভ্যুশনাল স্তর বলা উচিত ।

দৃশ্যমানভাবে, স্ট্রাইড এক এবং কোনও প্যাডিংয়ের সাথে কোনও ট্রান্সপোজড কনভলভের জন্য, আমরা কেবল জিরো (সাদা প্রবেশ) (চিত্র 1) দিয়ে মূল ইনপুট (নীল প্রবেশ) প্যাড করি।

চিত্র 1

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

চিত্র ২

আপনি এখানে কনভোলশনাল গাণিতিকগুলির আরও (দুর্দান্ত) চাক্ষুষ দেখতে পারেন ।


16
কেবলমাত্র আমি এটি বুঝতে পেরেছি তা নিশ্চিত করার জন্য: "ডিকনভলিউশন" কনভলিউশনের মতো প্রায় একই, তবে আপনি কিছু প্যাডিং যুক্ত করেন? (চিত্রের চারপাশে / যখন s> 1 প্রতিটি পিক্সেলের চারপাশেও)?
মার্টিন থোমা

17
হ্যাঁ, একটি ডিকনভোলিউশন স্তরটি কনভলিউশনও সম্পাদন করে! এই কারণেই ট্রান্সপোসড কনভোলিউশন নামের মতো আরও ভাল ফিট করে এবং ডিকনভোলিউশন শব্দটি আসলে বিভ্রান্তিকর।
ডেভিড দাও

11
চিত্র 1-এ আপনি কেন "কোনও প্যাডিং" বলবেন না, যদি আসলে ইনপুটটি শূন্য-প্যাডযুক্ত হয়?
স্টাস এস

8
উপায় দ্বারা: এটি এখন টেনসরফ্লোতে
মার্টিন থোমা

9
এই অতি স্বজ্ঞাত উত্তরের জন্য ধন্যবাদ, তবে কেন আমি দ্বিতীয়টি 'স্ট্রাইড টু' কেস তা নিয়ে বিভ্রান্ত হয়ে পড়েছি, যখন কার্নেলটি সরানো হয় তখন এটি ঠিক প্রথমটির মতো আচরণ করে।
বিক্ষোভ প্রদর্শন

49

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

ডেকনভ বোঝার জন্য আরও একটি উপায় হ'ল ক্যাফেতে ডিকনভোলিউশন স্তর বাস্তবায়ন পরীক্ষা করা, নিম্নলিখিত কোডের প্রাসঙ্গিক বিটগুলি দেখুন:

DeconvolutionLayer<Dtype>::Forward_gpu
ConvolutionLayer<Dtype>::Backward_gpu
CuDNNConvolutionLayer<Dtype>::Backward_gpu
BaseConvolutionLayer<Dtype>::backward_cpu_gemm

আপনি দেখতে পাচ্ছেন যে এটি ক্যাফেতে নিয়মিত ফরোয়ার্ড কনভ্যুশনাল লেয়ারের জন্য ঠিক ব্যাকপ্রপ হিসাবে বাস্তবায়িত হয়েছিল (CUDNN কনভার স্তর বনাম কনভলিউশন লাইয়ার ব্যাকপ্রপ বাস্তবায়নের সাথে তুলনা করার পরে আমার কাছে এটি আরও স্পষ্ট হয়েছিল) জেমএম ব্যবহার করে প্রয়োগ করা ব্যাকওয়ার্ড_জিপিইউ)। সুতরাং আপনি যদি নিয়মিত সমঝোতার জন্য ব্যাকপ্রোপেশনটি কীভাবে করা হয় তার মাধ্যমে কাজ করেন তবে আপনি বুঝতে পারবেন যান্ত্রিক গণনার স্তরে কী ঘটে। এই গণনাটি যেভাবে কাজ করে তা এই ব্লার্বের প্রথম অনুচ্ছেদে বর্ণিত অন্তর্দৃষ্টিগুলির সাথে মেলে।

তবে, কনভোলশনাল স্তরগুলি শেখার কাজ কীভাবে হয় তা আমি জানি না। (আমি বুঝতে পারি যে সহজ এমএলপিগুলি গ্রেডিয়েন্ট বংশোদ্ভূত দিয়ে কীভাবে শিখতে পারে, যদি এটি সাহায্য করে)।

আপনার প্রথম প্রশ্নের ভিতরে আপনার অন্য প্রশ্নের উত্তর দেওয়ার জন্য, এমএলপি ব্যাকপ্রোপেশন (সম্পূর্ণ সংযুক্ত স্তর) এবং কনভ্যুশনাল জালের মধ্যে দুটি প্রধান পার্থক্য রয়েছে:

1) ওজনের প্রভাব স্থানীয়করণ করা হয়, সুতরাং প্রথমে ব্যাকপ্রপ কীভাবে করবেন তা নির্ধারণ করুন, ফলাফলের চিত্রের একক পয়েন্টে ম্যাপিং, একটি ইনপুট চিত্রের একটি 3x3 ক্ষেত্রের সাথে একটি 3x3 ফিল্টার কনভলভ করুন say

2) রূপান্তরকারী ফিল্টারগুলির ওজন স্থানিক আগ্রাসনের জন্য ভাগ করা হয়। অনুশীলনে এর অর্থ যা হ'ল ফরোয়ার্ড পাসে একই ওজন সহ একই 3x3 ফিল্টারটি আউটপুট চিত্র (যে নির্দিষ্ট ফিল্টারের জন্য) উত্পাদনের জন্য ফরোয়ার্ড গণনার জন্য একই ওজন সহ পুরো চিত্রের মাধ্যমে পুরো চিত্রের মাধ্যমে টেনে আনা হয়। ব্যাকপ্রপের জন্য এর অর্থ কী তা হ'ল উত্স চিত্রের প্রতিটি পয়েন্টের ব্যাকপ্রপ গ্রেডিয়েন্টগুলি পুরো সীমার মধ্যে সংক্ষিপ্ত করা হয় যা আমরা ফরোয়ার্ড পাসের সময় সেই ফিল্টারটি টেনে নিয়েছি। লক্ষ করুন যে ক্ষতির আর্ট এক্স, ডাব্লু এবং পক্ষপাতের বিভিন্ন গ্রেডিয়েন্ট রয়েছে যেহেতু ডিএলস / ডিএক্স ব্যাকপ্রোপেজ করা দরকার, এবং ডিএলস / ডিডাব্লু হ'ল আমরা কীভাবে ওজন আপডেট করব। ডাব্লু এবং পক্ষপাত গণনা ডিএজি-তে স্বতন্ত্র ইনপুট (কোনও পূর্ববর্তী ইনপুট নেই), সুতরাং সেগুলি সম্পর্কে ব্যাকপ্রোপেশন করার দরকার নেই।

(my notation here assumes that convolution is y = x*w+b where '*' is the convolution operation)

7
আমি মনে করি এটি এই প্রশ্নের সেরা উত্তর।
kli_nlpr

8
আমি সম্মত যে এটিই সেরা উত্তর। শীর্ষের উত্তরে বেশ অ্যানিমেশন রয়েছে তবে আমি এই উত্তরটি না পড়া পর্যন্ত এগুলি কেবল আমার কাছে কিছু স্বেচ্ছাসেবী প্যাডিং সহ নিয়মিত কনভোলিউশনের মতো দেখায়। ওহ কীভাবে লোকেরা চোখের ক্যান্ডি দ্বারা দুলছে।
রিই নাকানো

1
সম্মত হন, গৃহীত উত্তরটি কোনও ব্যাখ্যা দেয় না। এটা অনেক ভাল।
BjornW

আপনার দুর্দান্ত ব্যাখ্যার জন্য ধন্যবাদ। ব্যাকপ্রপ কীভাবে সঠিকভাবে করা যায় তা আমি বর্তমানে বুঝতে পারি না। আপনি কি দয়া করে আমাকে একটি ইঙ্গিত দিতে পারেন?
বাসটিয়ান

33

ধাপে ধাপে গণিত কীভাবে ট্রান্সপোজ কনভলিউশন 2x 3x3 ফিল্টার এবং 2 এর স্ট্রাইড সহ উপস্থাপনা করে:

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

গণিতটি যাচাই করার জন্য সহজতম টেনসরফ্লো স্নিপেট:

import tensorflow as tf
import numpy as np

def test_conv2d_transpose():
    # input batch shape = (1, 2, 2, 1) -> (batch_size, height, width, channels) - 2x2x1 image in batch of 1
    x = tf.constant(np.array([[
        [[1], [2]], 
        [[3], [4]]
    ]]), tf.float32)

    # shape = (3, 3, 1, 1) -> (height, width, input_channels, output_channels) - 3x3x1 filter
    f = tf.constant(np.array([
        [[[1]], [[1]], [[1]]], 
        [[[1]], [[1]], [[1]]], 
        [[[1]], [[1]], [[1]]]
    ]), tf.float32)

    conv = tf.nn.conv2d_transpose(x, f, output_shape=(1, 4, 4, 1), strides=[1, 2, 2, 1], padding='SAME')

    with tf.Session() as session:
        result = session.run(conv)

    assert (np.array([[
        [[1.0], [1.0],  [3.0], [2.0]],
        [[1.0], [1.0],  [3.0], [2.0]],
        [[4.0], [4.0], [10.0], [6.0]],
        [[3.0], [3.0],  [7.0], [4.0]]]]) == result).all()

আমি মনে করি এখানে আপনার গণনা ভুল। মধ্যবর্তী আউটপুট 3+ 2 * 2 = 7 হওয়া উচিত, তারপরে 3x3 কার্নেলের জন্য চূড়ান্ত আউটপুট 7-3 + 1 = 5x5 হওয়া উচিত
অ্যালেক্স

দুঃখিত, @ অ্যালেক্স, তবে কেন মধ্যবর্তী আউটপুট হয় তা আমি বুঝতে ব্যর্থ 7. আপনি কী দয়া করে বিস্তারিত বলতে পারেন?
অ্যান্ডরিজ

2
@ অ্যান্ড্রি আপনি যে চিত্রটি দেখিয়েছেন তাতে চূড়ান্ত ফলাফল কেন কাটা হয়েছে?
জেমস বন্ড

28

নোট যে স্ট্যানফোর্ড সি এস বর্গ CS231n সংসর্গে : ভিসুয়াল স্বীকৃতির জন্য Convolutional নিউরাল নেটয়ার্ক, Andrej Karpathy দ্বারা , convolutional স্নায়ুর নেটওয়ার্ক ব্যাখ্যা একটি চমৎকার কাজ।

এই কাগজটি পড়া আপনার সম্পর্কে মোটামুটি ধারণা দেওয়া উচিত:

  • ডিকনভলিউশনাল নেটওয়ার্কস ম্যাথু ডি জিলার, দিলিপ কৃষ্ণান, গ্রাহাম ডব্লিউ টেইলর এবং রব ফার্গাস ডিপার্টমেন্ট অফ কম্পিউটার সায়েন্স, কারেন্ট ইনস্টিটিউট, নিউ ইয়র্ক বিশ্ববিদ্যালয়ের

এই স্লাইডগুলি ডিকনভলিউশনাল নেটওয়ার্কগুলির জন্য দুর্দান্ত।


29
সংক্ষিপ্ত অনুচ্ছেদে কি এই লিঙ্কগুলির কোনও একটির সামগ্রীর সংক্ষিপ্তসার সম্ভব? লিঙ্কগুলি আরও গবেষণার জন্য কার্যকর হতে পারে, তবে আদর্শভাবে স্ট্যাক এক্সচেঞ্জের উত্তরটিতে সাইটটি বন্ধ না করে মৌলিক প্রশ্নের সমাধান করার জন্য পর্যাপ্ত পাঠ্য থাকা উচিত।
নিল স্লেটার

আমি দুঃখিত তবে এই পৃষ্ঠাগুলির সামগ্রীর সংক্ষিপ্ত বিবরণ সংক্ষিপ্ত অনুচ্ছেদে খুব বড়।
আজরায়েল

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

6
যদিও লিঙ্কগুলি ভাল, আপনার নিজের কথায় মডেলের একটি সংক্ষিপ্তসারগুলি আরও ভাল হত।
স্মলচিস

11

এই বিষয়ে থিয়নের ওয়েবসাইট থেকে একটি দুর্দান্ত নিবন্ধ সন্ধান করেছে [1]:

স্থানান্তরিত কনভোলিউশনের প্রয়োজনীয়তা সাধারণত একটি সাধারণ রূপান্তরগুলির বিপরীত দিকে যেতে কোনও রূপান্তর ব্যবহারের আকাঙ্ক্ষা থেকে উদ্ভূত হয়, [...] বৈশিষ্ট্যযুক্ত মানচিত্রকে একটি উচ্চতর মাত্রায় স্থান দেওয়ার জন্য। [...] অর্থাত্, কনভলিউটির সংযোগের ধরণটি বজায় রেখে একটি 4-মাত্রিক স্থান থেকে 16-মাত্রিক স্থান পর্যন্ত মানচিত্র।

রূপান্তরিত কনভোলিউশনগুলি - যাকে ভগ্নাংশের দিক দিয়ে বোঝানো হয় - কনভলিউশনের সামনের এবং পিছনের পাসগুলিকে অদলবদল করে কাজ করে। এটির একটি উপায় লক্ষ্য করুন যে কার্নেলটি একটি কনভলিউশন সংজ্ঞায়িত করে, তবে এটি প্রত্যক্ষ সমঝোতা বা ট্রান্সপোসড কনভোলিউশন নির্ধারণ করা হয় কীভাবে এগিয়ে এবং পিছিয়ে পাসগুলি গণনা করা হয়।

ট্রান্সপোজেড কনভোলশন অপারেশনটিকে এর ইনপুট সম্পর্কিত কিছু সমঝোতার গ্রেডিয়েন্ট হিসাবে ভাবা যেতে পারে, যা সাধারণত বাস্তবে রূপান্তরকৃত রূপান্তরগুলি কার্যকর করা হয়।

পরিশেষে মনে রাখবেন যে প্রত্যক্ষ কনভলিউশন সহ ট্রান্সপোজড কনভোলিউশনটি কার্যকর করা সর্বদা সম্ভব। অসুবিধাটি হ'ল এটিতে সাধারণত ইনপুটটিতে অনেকগুলি কলাম এবং সারি জিরো যুক্ত থাকে যার ফলস্বরূপ অনেক কম দক্ষ বাস্তবায়ন হয়।

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

Image ---> convolution ---> Result

Result ---> transposed convolution ---> "originalish Image"

কখনও কখনও আপনি কনভ্যুলেশন পাথ ধরে কিছু মান সংরক্ষণ করেন এবং "ফিরে যাওয়ার সময়" সেই তথ্যটি পুনরায় ব্যবহার করুন:

Result ---> transposed convolution ---> Image

এ কারণেই সম্ভবত এটিকে ভুলভাবে একটি "ডিকনভোলিউশন" বলা হয়েছিল। তবে কনভ্যুশনটির ম্যাট্রিক্স ট্রান্সপোজ (সি ^ টি) এর সাথে এর কিছু সম্পর্ক রয়েছে, সুতরাং আরও উপযুক্ত নাম "ট্রান্সপোজড কনভোলশন"।

সুতরাং এটি কম্পিউটিং ব্যয়ের কথা বিবেচনা করার সময় অনেক অর্থবোধ করে। আপনি যদি ট্রান্সপোজড কনভোলশনটি ব্যবহার না করেন তবে অ্যামাজন জিপাসের জন্য আপনাকে আরও অনেক বেশি অর্থ প্রদান করতে হবে।

অ্যানিমেশনগুলি এখানে সাবধানে পড়ুন এবং দেখুন: http://DPlink.net/software/theano_versions/dev/tutorial/conv_arithmetic.html#no-zero-padding-unit-strides-transpused

কিছু অন্যান্য প্রাসঙ্গিক পড়া:

একটি ফিল্টারটির ট্রান্সপোজ (বা আরও সাধারণভাবে, হার্মিটিয়ান বা কনজুগেট ট্রান্সপোজ) কেবল মিলিত ফিল্টার [3]। এটি কার্নেলের বিপরীত সময়ে এবং সমস্ত মানগুলির সংমিশ্রণ গ্রহণ করে [2]।

আমি এটিতেও নতুন এবং কোনও প্রতিক্রিয়া বা সংশোধনের জন্য কৃতজ্ঞ হব।

[1] http://dePlayning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html

[২] http://dePlayning.net/software/theano_versions/dev/tutorial/conv_arithmetic.html#transpised-convolution-arithmetic

[3] https://en.wikedia.org/wiki/ ম্যাচড_ফিল্টার


1
নীট বাছাই করা, তবে লিঙ্কটিটি হ'ল
হারবার্ট

1
আমি মনে করি এটি সেরা উত্তর !!!
kli_nlpr

10

আমরা উপমা জন্য পিসিএ ব্যবহার করতে পারে।

রূপান্তরকারী ব্যবহার করার সময়, ফরওয়ার্ড পাসটি হ'ল ইনপুট চিত্র থেকে মূল নীতিগুলির গুণাগুণগুলি বের করা এবং পিছনের পাসটি (যে ইনপুটটিকে আপডেট করে) একটি নতুন ইনপুট চিত্র পুনর্গঠনের জন্য সহগের (গ্রেডিয়েন্ট) ব্যবহার করতে হয়, যাতে নতুন ইনপুট চিত্রটিতে পিসি সহগ রয়েছে যা পছন্দসই সহগের সাথে আরও ভাল মেলে।

ডেকনভ ব্যবহার করার সময়, ফরওয়ার্ড পাস এবং পিছনের পাসটি বিপরীত হয়। ফরোয়ার্ড পাসটি পিসি সহগের থেকে একটি চিত্র পুনর্গঠন করার চেষ্টা করে এবং পশ্চাদপদ পাসটি পিসি সহগগুলি (চিত্রের গ্রেডিয়েন্ট) আপডেট করে।

ডিকনভ ফরোয়ার্ড পাসটি ঠিক এই পোস্টে প্রদত্ত কনভার্ট গ্রেডিয়েন্ট গণনাটি করে: http://andrew.gibiansky.com/blog/machine-learning/convolutional-neural-networks/

এজন্য ডেকনভের ক্যাফে বাস্তবায়নে (আন্ড্রেই পোক্রোভস্কির উত্তরটি দেখুন), ডেকনভ ফরোয়ার্ড পাস ব্যাকগ্রাউন্ড_সিপিইউ_জেমি () কল করে এবং পিছনের পাসটি ফরোয়ার্ড_সিপিইউ_জে মিমি () বলে।


6

ডেভিড দাওর উত্তর ছাড়াও: অন্য দিক দিয়েও এটি চিন্তা করা সম্ভব। কোন (আউট রেজোলিউশন) ইনপুট পিক্সেলগুলি একক আউটপুট পিক্সেল তৈরি করতে ফোকাস করার পরিবর্তে আপনি পৃথক ইনপুট পিক্সেলগুলি আউটপুট পিক্সেলের কোন অঞ্চলে অবদান রাখবে তাও ফোকাস করতে পারেন।

এটি অত্যন্ত স্বজ্ঞাত এবং ইন্টারেক্টিভ ভিজ্যুয়ালাইজেশনের একটি সিরিজ সহ এই শিষ্ট প্রকাশনাতে এটি করা হয় । এই দিকটিতে চিন্তা করার একটি সুবিধা হ'ল চেকবোর্ডের নিদর্শনগুলি ব্যাখ্যা করা সহজ হয়ে যায়।


5

একটি ডিএসপি দৃষ্টিকোণ থেকে ধারণা

আমি এর থেকে কিছুটা দেরি করে তবুও আমার দৃষ্টিভঙ্গি এবং অন্তর্দৃষ্টি ভাগ করে নিতে চাই। আমার পটভূমি তাত্ত্বিক পদার্থবিজ্ঞান এবং ডিজিটাল সংকেত প্রক্রিয়াকরণ। বিশেষত আমি ওয়েভলেটগুলি অধ্যয়ন করেছি এবং কনভোলিউশনগুলি প্রায় আমার পিছনে রয়েছে;)

গভীর শিক্ষার সম্প্রদায়ের লোকেরা যেভাবে কনভোলশনের বিষয়ে কথা বলে তাও আমার কাছে বিভ্রান্তিকর ছিল। আমার দৃষ্টিকোণ থেকে যা মনে হচ্ছে তা হ'ল উদ্বেগের যথাযথ বিচ্ছেদ। আমি কিছু ডিএসপি সরঞ্জাম ব্যবহার করে গভীর শেখার কনভলিউশনগুলি ব্যাখ্যা করব।

দাবি পরিত্যাগী

আমার ব্যাখ্যাগুলি কিছুটা হাতের avyেউয়ের হবে এবং গাণিতিক কঠোর নয় মূল পয়েন্টগুলি পেতে get


সংজ্ঞা

xn={xn}n=={,x1,x0,x1,}

ynxn

(yx)n=k=ynkxk

q=(q0,q1,q2)x=(x0,x1,x2,x3)T

qx=(q1q000q2q1q000q2q1q000q2q1)(x0x1x2x3)

kN

kxn=xnk

kk1

kxn={xn/kn/kZ0otherwise

k=3

3{,x0,x1,x2,x3,x4,x5,x6,}={,x0,x3,x6,}
3{,x0,x1,x2,}={x0,0,0,x1,0,0,x2,0,0,}

k=2

2x=(x0x2)=(10000010)(x0x1x2x3)

এবং

2x=(x00x10)=(10000100)(x0x1)

k=kT


যন্ত্রাংশ দ্বারা গভীর শেখার কনভলিউশনগুলি

qx

  • kk(qx)
  • k(kq)x
  • kq(kx)

q(kx)=q(kTx)=(k(q)T)Tx

(q)q

q(kx)=(q1q000q2q1q000q2q1q000q2q1)(10000100)(x0x1)=(q1q200q0q1q200q0q1q200q0q1)T(10000010)T(x0x1)=((10000010)(q1q200q0q1q200q0q1q200q0q1))T(x0x1)=(k(q)T)Tx

যেহেতু একজন দেখতে পাচ্ছেন এটি হ'ল ট্রান্সপোসড অপারেশন, নামটি।

নিকটবর্তী নিকটবর্তী আপসাম্পলিংয়ের সাথে সংযোগ

কনভ্যুশনাল নেটওয়ার্কগুলিতে পাওয়া আর একটি সাধারণ পদ্ধতিকে অন্তর্নির্মিতভাবে কিছু অন্তর্নির্মিত আকারের সাথে উত্সাহ দেওয়া। আসুন একটি সাধারণ পুনরাবৃত্তি ইন্টারপোলেশন দিয়ে 2 ফ্যাক্টর দ্বারা আপসাম্পলিং করা যাক। এটি হিসাবে লেখা যেতে পারে2(11)xq2(11)qxq=(q0q1q2)

(11)q=(q0q0+q1q1+q2q2),

অর্থাত্ আমরা ফ্যাক্টর 2 এর সাথে একটি পুনরাবৃত্ত আপসাম্পলার এবং কার্নেল আকারের সাথে ট্রান্সপোজড কনভলভ দ্বারা 3 মাপের কার্নেলের সাথে একটি কনভ্যুশল প্রতিস্থাপন করতে পারি This এই ট্রান্সপোজড কনভ্যুশনের একই "অন্তরঙ্গ ক্ষমতা" রয়েছে তবে এটি আরও ভাল মেলানো ইন্টারপোলশন শিখতে সক্ষম হবে।


সিদ্ধান্ত এবং চূড়ান্ত মন্তব্য

আমি আশা করি যে মৌলিক ক্রিয়াকলাপগুলিতে পৃথকীকরণের মাধ্যমে গভীর জ্ঞানার্জনে পাওয়া কিছু সাধারণ সমঝোতাগুলি আমি স্পষ্ট করে বলতে পারি।

আমি এখানে পুলিং কভার করি নি। তবে এটি কেবল একটি অনলাইনীয় ডাউনস্যাম্পলার এবং এই স্বরলিপিটির মধ্যেও চিকিত্সা করা যেতে পারে।


দুর্দান্ত উত্তর। গাণিতিক / প্রতীকী দৃষ্টিকোণ নেওয়া প্রায়শই বিষয়গুলিকে স্পষ্ট করে। এই প্রসঙ্গে "ডিকনভোলিউশন" শব্দটি বিদ্যমান পরিভাষার সাথে সংঘর্ষের কথা ভেবে আমি কি সঠিক ?
ব্যবহারকারী 76284

এটি আসলে সংঘর্ষে আসে না, এটি কেবল কোনও ধারণা দেয় না। ডিকনভোলিউশন কেবলমাত্র আপসামাল অপারেটরের সাথে একটি রূপান্তর। ডিকনভোলিউশন শব্দটি মনে হচ্ছে এটি বিপরীত ক্রিয়াকলাপের কিছু রূপ হবে। এখানে একটি বিপরীত সম্পর্কে কথা বলা কেবল ম্যাট্রিক্স অপারেশনের প্রসঙ্গেই বোঝায় sense এটি বিপরীতমুখী ম্যাট্রিক্সের সাথে গুণগত কারণের বিপরীতমুখী ক্রিয়াকলাপ নয় (যেমন বিভাগ বনাম গুণ) multip
আন্দ্রে বার্গনার

zθx=zzθz=x

θz=xz=(θ)+x

সংক্ষেপে, ওপির তথাকথিত "ডিকনভলিউশন স্তর" আসলে ডিকনভোলিউশন করছে না। এটি অন্য কিছু করছে (আপনি নিজের উত্তরে যা বর্ণনা করেছেন)।
ব্যবহারকারী 76284

4

আমি বুঝতে কি ঠিক কাগজ ঘটেছে যতক্ষণ না আমি এই ব্লগ পোস্টে জুড়ে এসেছিল কষ্ট অনেক ছিল: http://warmspringwinds.github.io/tensorflow/tf-slim/2016/11/22/upsampling-and-image-segmentation -সঙ্গে-tensorflow-এবং-TF-পাতলা /

2x আপসাম্পলিংয়ে কী হচ্ছে তা আমি কীভাবে বুঝতে পারি তার সংক্ষিপ্তসার এখানে:

কাগজ থেকে তথ্য

  • আপস্যাম্পলিং কী?
    • "ফ্যাক্টর এফের সাথে নমুনা হ'ল 1 / এফ এর ভগ্নাংশের ইনপুট স্ট্রাইডের সাথে সমাবর্তন"
    • → আংশিক strided convolutions নামেও যেমন অনুযায়ী পক্ষান্তরিত সংবর্তন পরিচিত http://deeplearning.net/software/theano/tutorial/conv_arithmetic.html
  • এই প্রত্যয়টির পরামিতি কী কী?
  • ওজন কি স্থির বা প্রশিক্ষণযোগ্য?
    • গবেষণাপত্রে লেখা আছে "আমরা 2 মিলিয়ন আপসাম্পলিংকে বিলাইনার ইন্টারপোলেশন শুরু করি, তবে প্যারামিটারগুলি শিখতে দেয় [...]"।
    • তবে, সংশ্লিষ্ট গিথুব পৃষ্ঠায় বলা হয়েছে "আমাদের মূল পরীক্ষাগুলিতে বিভাজন স্তরগুলি বিলিনিয়ার কার্নেলগুলিতে আরম্ভ করা হয়েছিল এবং তারপরে শিখেছি follow ফলো-আপ পরীক্ষা-নিরীক্ষায় এবং এই রেফারেন্স বাস্তবায়নে, বিলিয়ারার কার্নেলগুলি স্থির করা হয়"
    • → নির্দিষ্ট ওজন

সহজ উদাহরণ

  1. নিম্নলিখিত ইনপুট চিত্রটি কল্পনা করুন:

ইনপুট চিত্র

  1. ভগ্নাংশগতভাবে দ্বিখণ্ডিত কনভলিউশনগুলি এই মানগুলির মধ্যে ফ্যাক্টর-1 = 2-1 = 1 জিরো সন্নিবেশ করে এবং তারপরে স্ট্রাইড = 1 ধরে পরে কাজ করে। সুতরাং, আপনি নিম্নলিখিত 6x6 প্যাডেড চিত্র পাবেন

প্যাডযুক্ত চিত্র

  1. বিলিনার 4x4 ফিল্টারটি দেখতে দেখতে এটির মতো লাগে। এর মানগুলি এমনভাবে নির্বাচন করা হয় যে ব্যবহৃত ওজন (= সমস্ত ightsোকানো শূন্যের সাথে গুণিত হচ্ছে না) 1 পর্যন্ত সমষ্টি 1 এর তিনটি অনন্য মান হ'ল 0.56, 0.19 এবং 0.06। তদুপরি, ফিল্টারটির কেন্দ্রটি তৃতীয় সারিতে এবং তৃতীয় কলামে পিক্সেল প্রতি কনভেনশন হয়।

ছাঁকনি

  1. প্যাডেড চিত্রটিতে 4x4 ফিল্টার প্রয়োগ করা (প্যাডিং = 'একই' এবং স্ট্রাইড = 1 ব্যবহার করে) নিম্নলিখিত 6x6 আপস্যাম্পলড চিত্রটি দেয়:

উপবিষ্ট চিত্র image

  1. প্রতিটি চ্যানেলের জন্য পৃথকভাবে এই ধরণের আপসাম্পলিং করা হয় ( https://github.com/shelhamer/fcn.berkeleyvision.org/blob/master/surgery.py এ লাইন 59 দেখুন )। শেষ অবধি, 2x আপসাম্পলিংটি কীভাবে সীমান্তগুলি পরিচালনা করতে হবে সে সম্পর্কে বিলাইনার ইন্টারপোলেশন এবং কনভেনশনগুলি ব্যবহার করে খুব সাধারণ আকার পরিবর্তন করা। 16x বা 32x আপসাম্পলিং একইভাবে কাজ করে, আমি বিশ্বাস করি।

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