নিউরাল নেটওয়ার্কে ড্রপআউট স্তরগুলি কোথায় রাখবেন সে সম্পর্কে কোনও সাধারণ নির্দেশিকা রয়েছে?
নিউরাল নেটওয়ার্কে ড্রপআউট স্তরগুলি কোথায় রাখবেন সে সম্পর্কে কোনও সাধারণ নির্দেশিকা রয়েছে?
উত্তর:
হিন্টন (২০১২) দ্বারা ড্রপআউট স্তরগুলির প্রস্তাবিত মূল কাগজে , ড্রপআউট (পি = ০.০ সহ) আউটপুটের আগে সম্পূর্ণ সংযুক্ত (ঘন) প্রতিটি স্তরে ব্যবহৃত হত; এটি কনভোলশনাল স্তরগুলিতে ব্যবহৃত হয়নি। এটি সর্বাধিক ব্যবহৃত কনফিগারেশন হয়ে ওঠে।
সাম্প্রতিক গবেষণাগুলি ড্রপআউটকে কনভ্যুশনাল স্তরগুলিতে প্রয়োগ করার ক্ষেত্রেও কিছু মূল্য দেখিয়েছে, যদিও এটি অনেক নিম্ন স্তরে রয়েছে: পি = 0.1 বা 0.2। ড্রপআউট প্রতিটি কনভোলজিনাল স্তরটির সক্রিয়করণের পরে ব্যবহৃত হত: CONV-> RELU-> ড্রপ।
relu
সর্বাধিক পুলিং স্তর অনুসরণ করে একটি অ্যাক্টিভেশন সহ একটি 2 ডি সমাবর্তন দেওয়া হয় , (2D) ড্রপআউট স্তরটি কনভ্যুশনের পরে তাত্ক্ষণিকভাবে চলে যাওয়া উচিত, অথবা সর্বাধিক পুলিং স্তর, বা উভয়ের পরে, বা এটি কোনও বিষয় নয়?
RELU
, প্রতিটি সিএনভি লেয়ারের পরে ড্রপআউট প্রয়োগ করা হয়েছিল । আমি বিশ্বাস করি না যে তারা সর্বোচ্চ পুলিং স্তরগুলি অনুসরণ করে ড্রপআউট যুক্ত করার প্রভাব তদন্ত করেছে।
প্রতিটি লিনিয়ার অনুমানের সামনে। পড়ুন শ্রীবাস্তব এট অল। (2014) ।
মূল কাগজ প্রস্তাবিত ড্রপআউট স্তর যা আউটপুটের আগে সম্পূর্ণ সংযুক্ত (ঘন) প্রতিটি স্তরে ব্যবহৃত হত; এটি কনভোলশনাল স্তরগুলিতে ব্যবহৃত হয়নি।
কনফিউশনাল লেয়ারের পরে ড্রপআউট স্তরটি ব্যবহার করা উচিত নয় কারণ আমরা ইনপুট চিত্রের প্রস্থ এবং উচ্চতায় ফিল্টারটি স্লাইড করি আমরা একটি 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
প্রযুক্তিগতভাবে আপনি কোনও ব্লকের শেষে ড্রপআউট স্তরটি যুক্ত করতে পারেন, উদাহরণস্বরূপ কনভলশনের পরে বা আরএনএন এনকোডিংয়ের পরে।