【问题标题】:Keras Input arrays (x) can not have different number of samples?Keras输入数组(x)不能有不同数量的样本?
【发布时间】:2017-04-30 03:04:20
【问题描述】:

我在当前的keras中发现,所有输入数组(x)应该有相同数量的样本。

对于许多多输入和多输出模型,如果我们可以为每个输入定义不同数量的样本(也称为批量大小),则更为可取。

这对于一个输入 X1 比另一个输入 X2“便宜”得多的情况非常重要。

现在假设我有两个输入 X1、X2 和两个输出 Y1、Y2。 Y1 是 X1 的函数,Y2 是 X1,X2 的函数。 映射 X1->Y1 比映射 X1,X2->Y2 的训练要快得多(“便宜”)。 所以我可能需要大批量 X1 和小批量 X2。

或者是否有可能破解当前代码以使输入具有不同的批量大小成为可能?

期待任何可以给我一些建议的人。谢谢!

【问题讨论】:

  • 您找到解决问题的方法了吗?

标签: deep-learning keras


【解决方案1】:

您可以为您的样本设置不同的权重。通过设置样本权重变量 (https://keras.io/models/model/#fit),您的训练算法将考虑到更便宜的样本。

如果您想在不同的批量大小上进行训练,您需要使用 model.train_on_batch 并传入不同的批量大小。这实质上意味着您编写自己的拟合循环。

【讨论】:

  • train_on_batch 应该可以工作。批量存储训练数据并在各种存储桶上进行训练。
  • 您好 Thomas 和 putonspectacles,感谢您的回复。但我的问题是我想要不同批次大小的输入 [X1, X2]。例如,X1 的批大小为 64,X2 的批大小为 256,即 X1 和 X2 的输入张量的第一个维度是 64 和 256。我尝试了 fit_generator 和 train_on_batch,当我输入 X=[X1, X2],它会抛出错误:“ValueError:所有输入数组 (x) 应具有相同数量的样本。得到数组形状:[(64, 200, 111), (64, 200), (64, 200), (256, 1), (256, 1)]" 我不确定样本权重在这里有什么帮助?
  • 我也有同样的问题。我尝试用虚拟数据填充较小的输入,然后在网络中对其进行切片以丢弃它,但是 Keras 也不允许这样做,因为您不能使用中间数据作为输入。 jmore,你能解决这个问题吗?
  • 我有同样的职业。到目前为止有什么解决方案吗?
  • 在 tensorflow 中,我会将网络应用于两个输入张量,然后通过 reduce_mean 将输出减少为单个值,然后将它们加在一起并共同学习。我不确定这在纯 keras 中是否可行,但您可以在 keras 中使用 tensorflow 代码。
猜你喜欢
  • 2019-05-26
  • 1970-01-01
  • 2020-05-13
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多