我在我的模型中使用了一个 dropout 层。当我使用时态数据时,我希望每个时间步的noise_shape相同- > (batch_size, 1, features)。
问题是如果我使用的批量大小不适合提供的样本,我会收到一条错误消息。示例:batch_size = 2, samples= 7。在最后一次迭代中,batch_size (2) 大于其余样本 (1)
其他层(我的情况:Masking、Dense 和 LSTM)显然对此没有问题,只需对最后一个不合适的样本使用较小的批次。
ConcreteError:训练数据形状为:[23, 300, 34] batchsize=3
InvalidArgumentError(参见上面的回溯):不兼容的形状:[2,300,34] vs. [3,1,34] [[Node: dropout_18/cond/dropout/mul = Mul[T=DT_FLOAT, _device="/job:localhost /replica:0/task:0/device:CPU:0"](dropout_18/cond/dropout/div, dropout_18/cond/dropout/Floor)]]
这意味着对于最后一批 [ 2,300,34 ],batch_size 不能拆分为 [ 3,1,34 ]
由于我仍处于参数调整阶段(是否会停止:-)),
- 回顾(使用 LSTM),
- 训练/验证/测试的拆分百分比,
- 和批量
仍然会不断变化。所有提到的都会影响训练数据的实际长度和形状。
我可以尝试通过一些计算总是找到下一个适合batch_size的 int。例如,如果batch_size = 4 和samples=21,我可以将batch_size减少到3。但是如果训练样本的数量是例如素数,这又是行不通的。另外,如果我选择 4,我可能想要 4。
我想复杂吗?有没有很多异常编程的简单解决方案?
谢谢