【问题标题】:model.fit() generates ERROR: ValueError: All input arrays (x) should have the same number of samplesmodel.fit() 生成 ERROR: ValueError: All input arrays (x) should have the same number of samples
【发布时间】:2018-01-15 16:13:47
【问题描述】:

我有一个带有多个自定义层的 keras 模型。当我跑步时:

model_.compile(optimizer=rms, loss=contrastive_loss,metrics=['accuracy'])

它编译没有任何问题。 但是当我尝试用数组列表拟合模型时:

X = [T1,R1] + [T2, R2]
model_.fit(X, [None]*2, epochs=50, batch_size=32)

我得到一个错误。 它似乎是由 engine\training.pyc 引起的,因为它打印:

C:\Tools\Anaconda2\lib\site-packages\keras\engine\training.pyc in _standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
124     for i in range(len(names)):
125         array = arrays[i]
126         if len(array.shape) == 1:
127             array = np.expand_dims(array, 1)
128             arrays[i] = array

AttributeError: 'NoneType' object has no attribute 'shape'

也许有人可以帮忙吗?我正在使用 keras 2.1.2 和 theano 0.9.0

编辑:

我试过了:

model_.fit(X, [np.asarray([None])]*2, epochs=50, batch_size=32, verbose=5) 

相反,现在我收到以下错误:

ValueError: All input arrays (x) should have the same number of samples. Got array shapes: 

然后它打印我的输入数组的形状。

有什么想法吗?

【问题讨论】:

  • 为什么会有None 作为输出? y_true = None 时你期望如何计算损失函数?
  • 因为我不知道我的采样层会保留多少个盒子。输出形状将取决于层内的计算。它可能会改变。
  • 但是你必须有目标数据。 fit 不需要形状,它需要数据。
  • 你的模型的输出形状是什么?你是如何定义 contrastive_loss 的?
  • 我的模型的输出形状是 [(None, 3, None, None), (None, 640)]。我使用了 yann.lecun.com/exdb/publis/pdf/hadsell-chopra-lecun-06.pdf 中的 contrastive_loss

标签: python error-handling keras theano


【解决方案1】:

我认为它会返回错误,因为 Keras 正在检查您输入的形状。然而列表(你正在喂什么)没有形状属性。尝试将它们作为数组传递:

import numpy as np
model_.fit(np.asarray(X), np.asarray([None]*2), epochs=50, batch_size=32)

【讨论】:

  • 感谢您的回答。但是在我的模型的定义中,我还提供了一个数组列表。好的,当我按照您的建议进行操作时,出现此错误:ValueError:模型需要 4 个输入数组,但只收到一个数组。找到:形状为 (4L,) 的数组
  • 好的,你得到了什么形状? Xy 的行数需要相同
  • 我明白了。我打印了 model_.output_shape 并得到:[(None, 3, None, None), (None, 640)]。所以我修改了我适合的行:model_.fit(X,[(None,3,None,None),(None,640)],epochs = 50,batch_size = 32,verbose = 5),但现在我得到错误:AttributeError:'tuple'对象没有属性'shape'
  • 和之前一样,X和y需要是numpy arrays
  • 但是当我按照建议 (np.asarray(X)) 执行时,我得到:ValueError:模型需要 4 个输入数组,但只收到一个数组。找到:形状为 (4L,) 的数组
猜你喜欢
  • 2018-11-06
  • 1970-01-01
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2021-11-14
  • 1970-01-01
  • 2018-05-05
相关资源
最近更新 更多