2D-তে স্পেশিয়াল ড্রপআউট কীভাবে প্রয়োগ করা হয়?


14

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

স্পেসিয়াল 2 ডি ড্রপআউট কীভাবে বাস্তবায়িত হয় সে সম্পর্কে কেরাসের কোড পড়ার পরে, মূলত আকারের একটি র্যান্ডম বাইনারি মাস্ক [ব্যাচ_সাইজ, 1, 1, নাম_চ্যানেল] প্রয়োগ করা হয়। যাইহোক, এই স্থানিক 2D ড্রপআউট আকৃতির ইনপুট কনভ্যুলশন ব্লকটি [ব্যাচ_সাইজ, উচ্চতা, প্রস্থ, নাম_চ্যানেল] ঠিক কী করে?

আমার বর্তমান অনুমান যে প্রতিটি পিক্সেলের জন্য, পিক্সেলের কোনও স্তর / চ্যানেলের যদি নেতিবাচক মান থাকে তবে that পিক্সেলের পুরো চ্যানেলগুলি শূন্যের চেয়ে খেলাপি হয়ে যাবে। এটা কি সঠিক?

তবে, যদি আমার অনুমানটি সঠিক হয়, তবে মূল ইনপুট ব্লকের মাত্রায় সঠিক আকারের [ব্যাচ_সাইজ, উচ্চতা, প্রস্থ, নাম_চ্যানেলস) বাইনারি মাস্ক ব্যবহার করে কীভাবে স্বাভাবিক উপাদান-ভিত্তিক ড্রপআউট দেয় (এটি অনুসারে টেনসরফ্লো এর আসল ড্রপআউট বাস্তবায়ন যা বাইনারি মাস্কের আকারটিকে ইনপুটটির আকার হিসাবে সেট করে)? কারণ এর অর্থ হ'ল যদি কনভ ব্লকের কোনও পিক্সেল নেতিবাচক হয় তবে পুরো রূপটি ব্লকটিকে 0 এ ডিফল্ট করা হবে This এটি বিভ্রান্তিকর অংশ যা আমি বেশ বুঝতে পারি না।

উত্তর:


14

এই প্রতিক্রিয়াটি কিছুটা দেরিতে হয়েছে, তবে আমার নিজের এটি সমাধান করার প্রয়োজন ছিল এবং ভেবেছিলাম এটি সাহায্য করতে পারে।

কাগজটি দেখে মনে হচ্ছে স্পেশাল ড্রপআউটে, আমরা ব্যক্তিগতভাবে 'পিক্সেলগুলির পরিবর্তে পুরো বৈশিষ্ট্য মানচিত্র (চ্যানেল নামে পরিচিত) 0 এ এলোমেলোভাবে সেট করি।

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

Tf.nn.DPout- এর ভিত্তিতে এটি এমন একটি ফাংশন যা এটি টেনসরফ্লোতে প্রয়োগ করে। Tf.nn.rodout থেকে একমাত্র আসল পরিবর্তনটি হ'ল আমাদের ড্রপআউট মাস্কের আকৃতিটি ব্যাচসাইজ * প্রস্থ * উচ্চতা * নুমফেরিচারম্যাপসের বিপরীতে ব্যাচসাইজ * 1 * 1 * নুমফেরিচার ম্যাপস is

def spatial_dropout(x, keep_prob, seed=1234):
    # x is a convnet activation with shape BxWxHxF where F is the 
    # number of feature maps for that layer
    # keep_prob is the proportion of feature maps we want to keep

    # get the batch size and number of feature maps
    num_feature_maps = [tf.shape(x)[0], tf.shape(x)[3]]

    # get some uniform noise between keep_prob and 1 + keep_prob
    random_tensor = keep_prob
    random_tensor += tf.random_uniform(num_feature_maps,
                                       seed=seed,
                                       dtype=x.dtype)

    # if we take the floor of this, we get a binary matrix where
    # (1-keep_prob)% of the values are 0 and the rest are 1
    binary_tensor = tf.floor(random_tensor)

    # Reshape to multiply our feature maps by this tensor correctly
    binary_tensor = tf.reshape(binary_tensor, 
                               [-1, 1, 1, tf.shape(x)[3]])
    # Zero out feature maps where appropriate; scale up to compensate
    ret = tf.div(x, keep_prob) * binary_tensor
    return ret

আশা করি এইটি কাজ করবে!


3

আমার বর্তমান অনুমান যে প্রতিটি পিক্সেলের জন্য, পিক্সেলের কোনও স্তর / চ্যানেলের যদি নেতিবাচক মান থাকে তবে that পিক্সেলের পুরো চ্যানেলগুলি শূন্যের চেয়ে খেলাপি হয়ে যাবে। এটা কি সঠিক?

আমি এখানে ঠিক কী বলতে চাইছি তা নিশ্চিত নই তবে ড্রপআউটটি ড্রপআউট মাস্কের জন্য এলোমেলোভাবে আঁকানো মান ব্যতীত অন্য কোনও মান নির্বিশেষে ঘটে। এটি হ'ল ড্রপআউট পিক্সেল মান , ফিল্টার ওজন বা বৈশিষ্ট্য মানচিত্রের মান দ্বারা প্রভাবিত হয় না । আপনি যদি আকারের একটি মুখোশ ব্যবহার [batch_size, 1, 1, num_channels]করেন তবে ড্রপআউট করার সময় আপনি এই আকারের বাইনারি মাস্ক পাবেন। সেই বাইনারি মাস্কের জিরোস সম্ভাব্যতার সাথে ঘটে rate(কমপক্ষে কেরাস বাস্তবায়নে, Dropoutস্তরের প্রথম যুক্তি )। এই মাস্কটি তখন আপনার বৈশিষ্ট্যযুক্ত মানচিত্রগুলি দ্বারা গুণিত হবে, সুতরাং যে কোনও মুখোশের মাত্রা 1 মাপের - সেই মুখোশ মাত্রা আপনাকে বৈশিষ্ট্যযুক্ত মানচিত্রের আকারের সাথে মেলে সম্প্রচারিত করবে।
একটি সহজ পরিস্থিতিটি কল্পনা করুন - আসুন ধরে নেওয়া যাক আপনার কাছে আকারের মানচিত্র রয়েছে [height, num_channels](আসুন আপাতত ব্যাচের আকারটিকে উপেক্ষা করুন) এবং আপনি মানচিত্রের মানগুলি বৈশিষ্ট্যযুক্ত:

print(feature_maps)

[[2 1 4]
 [1 3 2]
 [5 2 6]
 [2 2 1]]

print(feature_maps.shape)

(4, 3)

তারপরে আকারের বাইনারি ড্রপআউট মাস্কটি কল্পনা করুন [1, num_channels]:

print(dropout_mask)

[[0 1 0]]

print(dropout_mask.shape)

(1, 3)

এখন খেয়াল করুন আপনি যখন গুণ করবেন feature_mapsএবং কি হবে dropout_mask:

print(feature_maps * dropout_mask)

[[0 1 0]
 [0 3 0]
 [0 2 0]
 [0 2 0]]

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

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