У меня следующая ошибка при вычислении градиента.
ValueError: Несовместимые формы между операционным входом и вычисленным входным градиентом.Операция пересылки: write_8 / conv1d_transpose.Индекс ввода: 2. Исходная форма ввода: (100, 1, 10, 10, 100).Вычисляемая форма входного градиента: (100, 1, 13, 10)
def conv1d_layer(inp, filters, stride, output_shape=None, transpose=False):
if output_shape is not None:
output_shape = tf.constant(output_shape)
if transpose: return tf.contrib.nn.conv1d_transpose(inp,
filters, output_shape, stride, padding='SAME')
return tf.nn.conv1d(inp, filters, stride, 'SAME')
def forward(input, batch_size=100):
output = tf.reshape(output, [-1, 10, 10, 100])
init = tf.truncated_normal_initializer(stddev=1.)
filter = tf.get_variable('f1', [5, 1, 10], initializer=init)
output = conv1d_layer(output, filter, 2, [batch_size, 25, 25], True)
filter = tf.get_variable('f2', [5, 1, 25], initializer=init)
output = conv1d_layer(output, filter, 2, [batch_size, 50, 50], True)
filter = tf.get_variable('f3', [5, 1, 50], initializer=init)
out = conv1d_layer(output, filter, 2, [batch_size, 100, 100], True)
out = tf.reshape(out, [-1, 100 * 100])
vocab_size = 10000
w = tf.get_variable('w', [100*100, vocab_size], initializer=init)
b = tf.Variable(tf.zeros([vocab_size])) # biases
return tf.matmul(output, w) + b
Когда дан какой-то ввод, я делаю прямой переход, вызывая conv1d_layer.Затем, когда я вычисляю градиент следующим образом, возникает ошибка.
output = forward(input)
loss = tf.nn.softmax_cross_entropy_with_logits_v2(logits=output, labels=classes)
optimizer = tf.train.AdamOptimizer(lr, beta1=0.5)
grads = optimizer.compute_gradients(loss)
Я подозреваю, что мои фильтры неверны (я хочу получить окончательную форму [100, 100, vocab_size], где vocab_size = 10000как указано выше. Любая помощь будет принята с благодарностью.