ব্যাখ্যা করার জন্য আমি কিছু উদাহরণ টেনসরফ্লো কোড একসাথে রেখেছি (সম্পূর্ণ, কার্যকরী কোডটি এই তালিকাতে রয়েছে )। এই কোডটি আপনার লিঙ্ক করা কাগজে বিভাগ 2 এর প্রথম অংশ থেকে ক্যাপসুল নেটওয়ার্ক প্রয়োগ করে:
N_REC_UNITS = 10
N_GEN_UNITS = 20
N_CAPSULES = 30
# input placeholders
img_input_flat = tf.placeholder(tf.float32, shape=(None, 784))
d_xy = tf.placeholder(tf.float32, shape=(None, 2))
# translate the image according to d_xy
img_input = tf.reshape(img_input_flat, (-1, 28, 28, 1))
trans_img = image.translate(img_input, d_xy)
flat_img = tf.layers.flatten(trans_img)
capsule_img_list = []
# build several capsules and store the generated output in a list
for i in range(N_CAPSULES):
# hidden recognition layer
h_rec = tf.layers.dense(flat_img, N_REC_UNITS, activation=tf.nn.relu)
# inferred xy values
xy = tf.layers.dense(h_rec, 2) + d_xy
# inferred probability of feature
p = tf.layers.dense(h_rec, 1, activation=tf.nn.sigmoid)
# hidden generative layer
h_gen = tf.layers.dense(xy, N_GEN_UNITS, activation=tf.nn.relu)
# the flattened generated image
cap_img = p*tf.layers.dense(h_gen, 784, activation=tf.nn.relu)
capsule_img_list.append(cap_img)
# combine the generated images
gen_img_stack = tf.stack(capsule_img_list, axis=1)
gen_img = tf.reduce_sum(gen_img_stack, axis=1)
ক্যাপসুলগুলিতে ইনপুট পিক্সেলের মধ্যে ম্যাপিং কীভাবে কাজ করা উচিত তা কি কেউ জানেন?
এটি নেটওয়ার্ক কাঠামোর উপর নির্ভর করে। সেই কাগজে প্রথম পরীক্ষার জন্য (এবং উপরের কোড), প্রতিটি ক্যাপসুলের একটি গ্রহণযোগ্য ক্ষেত্র রয়েছে যা সম্পূর্ণ ইনপুট চিত্র অন্তর্ভুক্ত করে। এটি সহজতম ব্যবস্থা। সেক্ষেত্রে এটি প্রতিটি ক্যাপসুলের ইনপুট চিত্র এবং প্রথম লুকানো স্তরের মধ্যে একটি সম্পূর্ণ-সংযুক্ত স্তর।
বিকল্পভাবে, ক্যাপসুল গ্রাহক ক্ষেত্রগুলি আরও অনেকগুলি সিএনএন কার্নেলের মতো ধীরে ধীরে সাজানো যেতে পারে, যেমন কাগজের পরবর্তী পরীক্ষাগুলির মত।
স্বীকৃতি ইউনিটগুলিতে ঠিক কী হওয়া উচিত?
স্বীকৃতি ইউনিটগুলি প্রতিটি ক্যাপসুলের অভ্যন্তরীণ প্রতিনিধিত্ব। প্রতিটি ক্যাপসুল গণনা করতে অভ্যন্তরীণ উপস্থাপনা ব্যবহার করে p
, ক্যাপসুলের বৈশিষ্ট্যটি উপস্থিত থাকার সম্ভাবনা এবং xy
অনুমিত অনুবাদ মানগুলি ব্যবহার করে। নেটওয়ার্কটি xy
সঠিকভাবে ব্যবহার করতে শিখছে (এটি এটি) তা নিশ্চিত করার জন্য সেই কাগজের 2 চিত্রটি একটি চেক ।
কীভাবে এটি প্রশিক্ষিত করা উচিত? এটি কি প্রতিটি সংযোগের মধ্যে কেবল স্ট্যান্ডার্ড ব্যাক প্রপ?
বিশেষত, আপনার উত্পন্ন আউটপুট এবং আসলটির মধ্যে সাদৃশ্য জারি করে এমন একটি ক্ষতি ব্যবহার করে এটি একটি অটোরকোডার হিসাবে প্রশিক্ষণ করা উচিত। গড় বর্গ ত্রুটি এখানে ভাল কাজ করে। এটি বাদ দিয়ে হ্যাঁ, আপনাকে ব্যাকপ্রপ দিয়ে গ্রেডিয়েন্ট বংশোদ্ভূত প্রচার করতে হবে।
loss = tf.losses.mean_squared_error(img_input_flat, gen_img)
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)