我遇到了许多与动态轴相关的问题。我正在尝试实现类似于 LSTM() 函数的卷积 rnn,但处理顺序图像输入并输出图像。
我能够构建网络并通过它传递虚拟数据以产生输出,但是当我尝试使用 input_variable 标签计算错误时,我始终看到以下错误:
RuntimeError: Node '__v2libuid__Input471__v2libname__img_label' (InputValue operation): DataFor: FrameRange's dynamic axis is inconsistent with matrix: {numTimeSteps:1, numParallelSequences:2, sequences:[{seqId:0, s:0, begin:0, end:1}, {seqId:1, s:1, begin:0, end:1}]} vs. {numTimeSteps:2, numParallelSequences:1, sequences:[{seqId:0, s:0, begin:0, end:2}]}`
如果我正确理解此错误消息,它声称我作为标签传入的值与 2 个时间步长和 1 个并行序列的预期轴不一致,而所需的是 1 个时间步长和 2 个序列。这对我来说很有意义,但我不确定我传入的数据如何不符合这一点。以下是(大致)变量声明和 eval 语句:
…
img_input = input_variable(shape=img_shape, dtype=np.float32, name="img_input")
convlstm = Recurrence(conv_lstm_cell, initial_state=initial_state)(img_input)
out = select_last(convlstm)
img_label = input_variable(shape=img_shape, dynamic_axes=out.dynamic_axes, dtype=np.float32, name="img_label”)
error = squared_error(out, img_label)
…
dummy_input = np.ones(shape=(2, 3, 3, 32, 32)) # (batch, seq_len, channels, height, width)
dummy_label = np.ones(shape=(2, 3, 32, 32)) # (batch, channels, height, width)
out = error.eval({img_input:dummy_input, img_label:dummy_label})
我相信部分问题在于创建 img_label input_variable 时设置的 dynamic_axes,我也尝试将其设置为 [Axis.default_batch_axis()] 并且根本没有设置它,或者平方错误抱怨 out 和 img_label 之间的轴不一致或者我看到与上面相同的错误。