我收到以下错误:
ValueError:无法为Tensor u'vector_rnn_1 / Placeholder_1:0'提供形状值(1,251,5),其形状为'(1,117,5)'
从这里运行代码时https://github.com/tensorflow/magenta-demos/blob/master/jupyter-notebooks/Sketch_RNN.ipynb
此方法中发生错误:
def encode(input_strokes):
strokes = to_big_strokes(input_strokes).tolist()
strokes.insert(0, [0, 0, 1, 0, 0])
seq_len = [len(input_strokes)]
draw_strokes(to_normal_strokes(np.array(strokes)))
return sess.run(eval_model.batch_z, feed_dict={eval_model.input_data: [strokes], eval_model.sequence_lengths: seq_len})[0]
我必须提到我按照这里的说明训练我自己的模型:
https://github.com/tensorflow/magenta/tree/master/magenta/models/sketch_rnn
有人可以帮我理解和解决这个问题吗?
感谢和问候
问题是笔划大小不等于算法预期的阵列大小。因此,调整笔画数组可以解决问题。
对于我的情况,问题是由to_big_strokes()函数引起的。如果不修改sketch_rnn / utils.py中的to_big_stroke(),它将默认将input_strokes序列延长到250的长度。 您需要做的就是修改该函数中的参数max_len。您需要将该值更改为您自己的数据集的最大序列长度,对我来说这是21,如下面标有“更改”的行。
def to_big_strokes(stroke, max_len=21): # change: 250 -> 21
"""Converts from stroke-3 to stroke-5 format and pads to given length."""
# (But does not insert special start token).
result = np.zeros((max_len, 5), dtype=float)
l = len(stroke)
assert l <= max_len
result[0:l, 0:2] = stroke[:, 0:2]
result[0:l, 3] = stroke[:, 2]
result[0:l, 2] = 1 - result[0:l, 3]
result[l:, 4] = 1
return result