ট্রান্সফর্মিং অটো এনকোডার্স


10

আমি সবেমাত্র জেনোফ হিন্টনের কাগজটি স্বয়ংক্রিয় সংস্থাগুলি পরিবর্তনের বিষয়ে পড়েছি

হিন্টন, ক্রিজেভস্কি এবং ওয়াং: অটো-এনকোডারগুলির রূপান্তর । কৃত্রিম নিউরাল নেটওয়ার্কস এবং মেশিন লার্নিংয়ে, ২০১১।

এবং বেশ কিছু এরকম কিছু নিয়ে খেলতে চাই। তবে এটি পড়ে আমি কীভাবে বাস্তবে এটি বাস্তবায়ন করতে পারি সে সম্পর্কে কাগজটি থেকে পর্যাপ্ত বিবরণ পেতে পারি নি।

  • ক্যাপসুলগুলিতে ইনপুট পিক্সেলের মধ্যে ম্যাপিং কীভাবে কাজ করা উচিত তা কি কেউ জানেন?
  • স্বীকৃতি ইউনিটগুলিতে ঠিক কী হওয়া উচিত?
  • কীভাবে এটি প্রশিক্ষিত করা উচিত? এটি কি প্রতিটি সংযোগের মধ্যে কেবল স্ট্যান্ডার্ড ব্যাক প্রপ?

আরও ভাল এটির জন্য অনুরূপ কোনও কিছুর উত্স কোডের লিঙ্ক।


আপনি কি লেখকদের সাথে যোগাযোগের চেষ্টা করেছেন? তারা অনলাইনে কিছু উপলব্ধ থাকতে পারে।
রিকার্ডো ক্রুজ

উত্তর:


4

ব্যাখ্যা করার জন্য আমি কিছু উদাহরণ টেনসরফ্লো কোড একসাথে রেখেছি (সম্পূর্ণ, কার্যকরী কোডটি এই তালিকাতে রয়েছে )। এই কোডটি আপনার লিঙ্ক করা কাগজে বিভাগ 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)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.