首页 文章

使用Dropout图层的noise_shape . Batch_size不适合提供的样本 . 该怎么办?

提问于
浏览
0

我在我的模型中使用了一个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]与[3,1,34] [[节点: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),

  • 列车/瓦/测试的百分比,

  • 和batchsize

仍将不断变化 . 所有上述内容都会影响训练数据的实际长度和形状 .

我可以尝试总是通过一些计算找到batch_size的下一个拟合int . 例如,如果batch_size = 4且samples = 21,我可以将batch_size减少到3.但是如果训练样本的数量是例如再次对此进行补偿是行不通的 . 另外如果我选择4,我可能想要4 .

我觉得复杂吗?有没有很多异常编程的简单解决方案?

谢谢

1 回答

  • 0

    感谢this post中的nuric,答案非常简单 .

    当前实现确实根据运行时批量大小进行调整 . 从Dropout层实现代码:symbolic_shape = K.shape(输入)noise_shape = [symbolic_shape [axis]
    如果形状是其他形状
    for axis,enumerate中的形状(self.noise_shape)]
    因此,如果你给出noise_shape =(None,1,features),那么形状将是(runtime_batchsize,1,features),遵循上面的代码 .

相关问题