নিউরাল নেটওয়ার্কে আমার ড্রপআউট স্তরগুলি কোথায় রাখা উচিত?


65

নিউরাল নেটওয়ার্কে ড্রপআউট স্তরগুলি কোথায় রাখবেন সে সম্পর্কে কোনও সাধারণ নির্দেশিকা রয়েছে?


1
ড্রপআউট নিয়মিতকরণ ব্যবহার এলোমেলোভাবে একটি লুকানো স্তরে নিউরনের কিছু অংশ অক্ষম করে। কেরাস লাইব্রেরিতে আপনি কোনও লুকানো স্তরের পরে ড্রপআউট যুক্ত করতে পারেন এবং আপনি একটি ড্রপআউট হার নির্দিষ্ট করতে পারেন, যা পূর্ববর্তী স্তরের প্রতিবন্ধী নিউরনের শতাংশ নির্ধারণ করে।
31:12

এখানে কি কর্মফল অনুমোদিত?
প্রতিকার

4
@ অ্যাড্রেস কে কৃষক, এবং কিভাবে?
ফ্রাঙ্ক ডারননকোর্ট

আপনি কি এই উত্তরটি সমাধান করেছেন?
ব্লেজার্ড

কি ধরণের নিউরাল নেটওয়ার্ক? সিএনএন, আরএনএন, অন্য?
ওয়েইন

উত্তর:


34

হিন্টন (২০১২) দ্বারা ড্রপআউট স্তরগুলির প্রস্তাবিত মূল কাগজে , ড্রপআউট (পি = ০.০ সহ) আউটপুটের আগে সম্পূর্ণ সংযুক্ত (ঘন) প্রতিটি স্তরে ব্যবহৃত হত; এটি কনভোলশনাল স্তরগুলিতে ব্যবহৃত হয়নি। এটি সর্বাধিক ব্যবহৃত কনফিগারেশন হয়ে ওঠে।

সাম্প্রতিক গবেষণাগুলি ড্রপআউটকে কনভ্যুশনাল স্তরগুলিতে প্রয়োগ করার ক্ষেত্রেও কিছু মূল্য দেখিয়েছে, যদিও এটি অনেক নিম্ন স্তরে রয়েছে: পি = 0.1 বা 0.2। ড্রপআউট প্রতিটি কনভোলজিনাল স্তরটির সক্রিয়করণের পরে ব্যবহৃত হত: CONV-> RELU-> ড্রপ।


সুতরাং এগুলি কি সমস্ত স্তরগুলির পরে রাখা উচিত, বা কেবল একটি অ-লিনিয়ার অ্যাক্টিভেশন রয়েছে? যেমন reluসর্বাধিক পুলিং স্তর অনুসরণ করে একটি অ্যাক্টিভেশন সহ একটি 2 ডি সমাবর্তন দেওয়া হয় , (2D) ড্রপআউট স্তরটি কনভ্যুশনের পরে তাত্ক্ষণিকভাবে চলে যাওয়া উচিত, অথবা সর্বাধিক পুলিং স্তর, বা উভয়ের পরে, বা এটি কোনও বিষয় নয়?
z0r

1
আমি স্পষ্ট করে উত্তরটি আপডেট করেছি যে পার্ক এট আল দ্বারা কাজ করাতে RELU, প্রতিটি সিএনভি লেয়ারের পরে ড্রপআউট প্রয়োগ করা হয়েছিল । আমি বিশ্বাস করি না যে তারা সর্বোচ্চ পুলিং স্তরগুলি অনুসরণ করে ড্রপআউট যুক্ত করার প্রভাব তদন্ত করেছে।
ওহ 4

এটি লক্ষণীয় যে হিন্টন পেপারে, পৃষ্ঠা 10 (1938) তে, তারা লিখেছেন যে গুগল স্ট্রিট ভিউ ডেটাসেটের বিরুদ্ধে পরীক্ষা করার সময় কনভোলজিকাল স্তরগুলিতে ড্রপআউট ব্যবহার করে শ্রেণিবিন্যাসের ত্রুটি হ্রাস পেয়েছিল।
মিকি পি

9

প্রতিটি লিনিয়ার অনুমানের সামনে। পড়ুন শ্রীবাস্তব এট অল। (2014)


4
অন্যান্য উত্তরগুলি কীভাবে ড্রপআউট প্রয়োগ করতে হবে তা বর্ণনা করে , তবে এটিই কেবলমাত্র প্রতিক্রিয়া যা কোথায় ড্রপআউট প্রয়োগ করতে হবে এর ওপি প্রশ্নের উত্তর দেয় ।
17:38

3

মূল কাগজ প্রস্তাবিত ড্রপআউট স্তর যা আউটপুটের আগে সম্পূর্ণ সংযুক্ত (ঘন) প্রতিটি স্তরে ব্যবহৃত হত; এটি কনভোলশনাল স্তরগুলিতে ব্যবহৃত হয়নি।

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


2

আমি যদি ভুল না করি তবে প্রতিটি কক্ষের অ-লৈখিকতার পরে আপনি এটি যুক্ত করতে পারেন:

layer_1 = (1/(1+np.exp(-(np.dot(X,synapse_0)))))
if(do_dropout):
    layer_1 *= np.random.binomial([np.ones((len(X),hidden_dim))],1-dropout_percent)[0] * (1.0/(1-dropout_percent))

প্রথম লাইনটি অ্যাক্টিভেশন ফাংশন এবং শেষটি ফলাফলটিতে ড্রপআউট যুক্ত করছে। পড়ুন দয়া করে এই ব্লগে । আশাকরি এটা সাহায্য করবে.

অথবা আপনি এই স্নিপেটের মতো এম্বেডিং ইনপুটটিতে রাখতে পারেন:

class BahdanauAttnDecoderRNN(nn.Module):
    def __init__(self, hidden_size, output_size, n_layers=1, dropout_p=0.1):
        super(AttnDecoderRNN, self).__init__()

        # Define parameters
        self.hidden_size = hidden_size
        self.output_size = output_size
        self.n_layers = n_layers
        self.dropout_p = dropout_p
        self.max_length = max_length

        # Define layers
        self.embedding = nn.Embedding(output_size, hidden_size)
        self.dropout = nn.Dropout(dropout_p)
        self.attn = GeneralAttn(hidden_size)
        self.gru = nn.GRU(hidden_size * 2, hidden_size, n_layers, dropout=dropout_p)
        self.out = nn.Linear(hidden_size, output_size)

    def forward(self, word_input, last_hidden, encoder_outputs):
        # Note that we will only be running forward for a single decoder time step, but will use all encoder outputs

        # Get the embedding of the current input word (last output word)
        word_embedded = self.embedding(word_input).view(1, 1, -1) # S=1 x B x N
        word_embedded = self.dropout(word_embedded)

        # Calculate attention weights and apply to encoder outputs
        attn_weights = self.attn(last_hidden[-1], encoder_outputs)
        context = attn_weights.bmm(encoder_outputs.transpose(0, 1)) # B x 1 x N

        # Combine embedded input word and attended context, run through RNN
        rnn_input = torch.cat((word_embedded, context), 2)
        output, hidden = self.gru(rnn_input, last_hidden)

        # Final output layer
        output = output.squeeze(0) # B x N
        output = F.log_softmax(self.out(torch.cat((output, context), 1)))

        # Return final output, hidden state, and attention weights (for visualization)
        return output, hidden, attn_weights

সূত্র: https://github.com/spro/practical-pytorch/blob/master/seq2seq-translation/seq2seq-translation.ipynb

প্রযুক্তিগতভাবে আপনি কোনও ব্লকের শেষে ড্রপআউট স্তরটি যুক্ত করতে পারেন, উদাহরণস্বরূপ কনভলশনের পরে বা আরএনএন এনকোডিংয়ের পরে।


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