Chuyển đổi AutoEncoders


10

Tôi vừa đọc bài viết của Geoff Hinton về việc chuyển đổi bộ tự động

Hinton, Krizhevsky và Wang: Chuyển đổi bộ mã hóa tự động . Trong mạng nơ ron nhân tạo và học máy, 2011.

và khá thích chơi xung quanh với một cái gì đó như thế này. Nhưng khi đọc nó tôi không thể có đủ thông tin chi tiết từ bài báo về cách tôi thực sự có thể thực hiện nó.

  • Có ai biết cách ánh xạ giữa các pixel đầu vào thành các viên nang nên hoạt động không?
  • Chính xác những gì sẽ xảy ra trong các đơn vị công nhận?
  • Làm thế nào nó nên được đào tạo? Có phải chỉ là prop trở lại tiêu chuẩn giữa mọi kết nối?

Thậm chí tốt hơn sẽ là một liên kết đến một số mã nguồn cho điều này hoặc một cái gì đó tương tự.


Bạn đã thử liên hệ với các tác giả? Có lẽ họ có một cái gì đó có sẵn trực tuyến.
Ricardo Cruz

Câu trả lời:


4

Tôi đã tập hợp một số mã tenorflow ví dụ để giúp giải thích (mã đầy đủ, hoạt động nằm trong ý chính này ). Mã này thực hiện mạng viên nang từ phần đầu tiên của phần 2 trong bài báo mà bạn đã liên kết:

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)

Có ai biết cách ánh xạ giữa các pixel đầu vào thành các viên nang nên hoạt động không?

Điều này phụ thuộc vào cấu trúc mạng. Đối với thử nghiệm đầu tiên trong bài báo đó (và mã ở trên), mỗi viên nang có một trường tiếp nhận bao gồm toàn bộ hình ảnh đầu vào. Đó là sự sắp xếp đơn giản nhất. Trong trường hợp đó, đó là lớp được kết nối đầy đủ giữa hình ảnh đầu vào và lớp ẩn đầu tiên trong mỗi viên nang.

Ngoài ra, các lĩnh vực tiếp nhận viên nang có thể được sắp xếp giống như hạt nhân CNN với các bước tiến, như trong các thí nghiệm sau này trong bài báo đó.

Chính xác những gì sẽ xảy ra trong các đơn vị công nhận?

Các đơn vị công nhận là một đại diện nội bộ mà mỗi viên nang có. Mỗi viên nang sử dụng biểu diễn bên trong này để tính toán p, xác suất xuất hiện tính năng của viên nang và xy, các giá trị dịch được suy ra. Hình 2 trong bài báo đó là một kiểm tra để đảm bảo mạng đang học cách sử dụng xychính xác (đó là).

Làm thế nào nó nên được đào tạo? Có phải chỉ là prop trở lại tiêu chuẩn giữa mọi kết nối?

Cụ thể, bạn nên đào tạo nó như một bộ mã hóa tự động, sử dụng một mất mát để thực thi sự tương tự giữa đầu ra được tạo ra và bản gốc. Có nghĩa là lỗi vuông hoạt động tốt ở đây. Ngoài ra, có, bạn sẽ cần truyền bá độ dốc với backprop.

loss = tf.losses.mean_squared_error(img_input_flat, gen_img)
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.