Как использовать conv1d_transpose в Tensorflow?
conv1d_transpose
еще не в стабильной версии Tensorflow, но реализация доступна на GitHub
Я хотел бы создать 1D сеть деконволюции. Форма ввода [-1, 256, 16]
и вывод должен быть [-1,1024,8]
, Размер ядра - 5, а шаг - 4.
Я попытался построить 1D сверточный слой с помощью этой функции:
(output_depth, input_depth) = (8, 16)
kernel_width = 7
f_shape = [kernel_width, output_depth, input_depth]
layer_1_filter = tf.Variable(tf.random_normal(f_shape))
layer_1 = tf_exp.conv1d_transpose(
x,
layer_1_filter,
[-1,1024,8],
stride=4, padding="VALID"
)
Форма layer_1
является TensorShape([Dimension(None), Dimension(None), Dimension(None)])
, но это должно быть [-1,1024,8]
Что я не прав? Как реализовать деконволюцию 1D в Tensorflow?
2 ответа
Новый tf.contrib.nn.conv1d_transpose теперь добавлен в Tensorflow API r1.8.
На данный момент запрос на открытие открыт, поэтому API и поведение могут и, вероятно, изменятся. Некоторая особенность, которую можно ожидать от conv1d_transpose
не поддерживаются:
output_shape
требует, чтобы размер партии был известен статически, не может пройти-1
;- с другой стороны, форма вывода является динамической (это объясняет
None
измерение).
Так же kernel_width=7
надеется in_width=255
не 256
, Должен сделать kernel_width
меньше, чем 4
соответствовать in_width=256
, Результатом является этот демонстрационный код:
x = tf.placeholder(shape=[None, 256, 16], dtype=tf.float32)
filter = tf.Variable(tf.random_normal([3, 8, 16])) # [kernel_width, output_depth, input_depth]
out = conv1d_transpose(x, filter, output_shape=[100, 1024, 8], stride=4, padding="VALID")
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
result = sess.run(out, feed_dict={x: np.zeros([100, 256, 16])})
print(result.shape) # prints (100, 1024, 8)