Возможно ли это?
Слой корреспондируемого уровня для уровня деконволюции - это tf.conv2d_transpose (), но в документе говорится, что это просто слой транспонирования, а не реальное деконвью.
Итак, как я могу рассчитать вес для слоев deconv?
Как в следующих кодах, как я могу сделать y == x (вычисляя W2 из W)? Это возможно? Или единственный способ - тренировать слой deconv?
# [batch, height, width, depth]
x_image = tf.placeholder(tf.float32,shape=[3,2])
x = tf.reshape(x_image,[1,3,2,1])
#Filter: W [kernel_height, kernel_width, output_depth, input_depth]
W_cpu = np.array([[-1,1]],dtype=np.float32)
W = tf.Variable(W_cpu)
W = tf.reshape(W, [1,2,1,1])
W_cpu2 = np.array([[-1,1]],dtype=np.float32)
W2 = tf.Variable(W_cpu2)
W2 = tf.reshape(W2, [1,2,1,1])
strides=[1, 1, 1, 1]
padding='VALID'
z = tf.nn.conv2d(x, W, strides=strides, padding=padding)
y = tf.nn.conv2d_transpose(z, W2, [1,3,2,1],strides, padding)
x_data = np.array([[1,-1],[2,2],[1,2]],dtype=np.float32)
with tf.Session() as sess:
init = tf.initialize_all_variables()
sess.run(init)
x = (sess.run(x, feed_dict={x_image: x_data}))
W = (sess.run(W, feed_dict={x_image: x_data}))
z = (sess.run(z, feed_dict={x_image: x_data}))
y = (sess.run(y, feed_dict={x_image: x_data}))
print("The shape of x:\t", x.shape, ",\t and the x.reshape(3,2) is :")
print(x.reshape(3,2))
print()
print ("The shape of x:\t", W.shape, ",\t and the W.reshape(1,2) is :")
print (W.reshape(1,2))
print ("")
print ("The shape of z:\t", W.shape, ",\t and the W.reshape(1,2) is :")
print (z.reshape(3))
print ("")
print ("The shape of y:\t", y.shape, ",\t and the y.reshape(3,3) is :")
print (y.reshape(3,2))
print ("")
Но в Визуализация и понимание сверточных сетей, Мэтью Д. Цейлер и Роб Фергус , они предложили способ деконвенции с "транспонированным"
версии тех же фильтров *, это означает, что форма транспонирована или включает вес?