Как использовать 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)
Другие вопросы по тегам