【问题标题】:Keras Array Input ErrorKeras 数组输入错误
【发布时间】:2023-03-10 04:25:01
【问题描述】:

我收到以下错误:

ValueError: Error when checking model input: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 6 arrays but instead got the following list of 3 arrays: [array([[ 0,  0,  0, ..., 18, 12,  1],
       [ 0,  0,  0, ..., 18, 11,  1],
       [ 0,  0,  0, ..., 18,  9,  1],
       ...,
       [ 0,  0,  0, ..., 18, 15,  1],
       [ 0,  0,  0, ..., 18,  9,  ...

在我的 keras 模型中。

我认为模型弄错了什么?

当我向模型提供输入时会发生这种情况。相同的输入在另一个程序中效果很好。

【问题讨论】:

    标签: numpy machine-learning tensorflow deep-learning keras


    【解决方案1】:

    如果没有更多信息,就不可能诊断出您的确切问题。

    我通常根据我的训练数据X指定第一层的input_shape参数。

    例如

    model = Sequential()
    model.add(Dense(32, input_shape=X.shape[0]))
    

    我想你会希望X 看起来像这样:

       [
        [[ 0,  0,  0, ..., 18, 11,  1]],
        [[ 0,  0,  0, ..., 18,  9,  1]],
       ....
       ]
    

    因此,您可以尝试使用以下行来重塑它:

    X = np.array([[sample] for sample in X])
    

    【讨论】:

    • 再次出现同样的错误 ValueError: Error when checks model input: 您传递给模型的 Numpy 数组列表不是模型预期的大小。预计会看到 6 个数组,但得到了以下 3 个数组的列表: [array([[[ 0, 0, 0, ..., 18, 12, 1]], [[ 0, 0, 0, ... , 18, 11, 1]], [[ 0, 0, 0, ..., 18, 9, 1]], ..., [[ 0, 0, 0, ..., 18, 15, 1 ]], [[ 0, 0, 0, ....
    • 您可以从错误代码中看到您尝试输入三个数组的列表。您需要确保您的训练数据看起来像我在上面显示的 X。
    • 我的训练方式和keras官方示例代码一样。我的输入数据的形状为 (10000, 68)。我看不到需要 6 个阵列的位置和方式。没有任何层具有将 6 个数组作为输入的形状。您是如何提出这个建议的?
    • 我不会调试你链接到的 300 行代码。如果您需要更多反馈,您必须找到相关代码以包含在您的问题中。
    • 不,我不是要调试。我只是问你是怎么猜到最初的修复的?需要 6 个数组,其中有 3 个……在您为每个样本修复一个新数组时……我想理解它会帮助我进行调试。谢谢。
    【解决方案2】:

    问题确实来自于向网络提供了错误的输入。

    在我的情况下,问题是我的自定义图像生成器将整个数据集作为输入而不是一对图像标签传递。这是因为我认为 Keras 的 generator.flow(x,y, batch_size) 内部已经有一个 yield 结构,但是正确的 generator 结构应该如下(单独的 yield):

    def generator(batch_size):
    
    (images, labels) = utils.get_data(1000) # gets 1000 samples from dataset
    labels = to_categorical(labels, 2)
    
    generator = ImageDataGenerator(featurewise_center=True,
                     featurewise_std_normalization=True,
                     rotation_range=90.,
                     width_shift_range=0.1,
                     height_shift_range=0.1,
                     zoom_range=0.2)
    
    generator.fit(images)
    
    gen = generator.flow(images, labels, batch_size=32)
    
    while 1:
        x_batch, y_batch = gen.next()
        yield ([x_batch, y_batch])
    

    我知道这个问题已经过时了,但它可能会为人们找到问题节省一些时间。

    【讨论】:

      猜你喜欢
      • 2021-06-20
      • 2018-09-15
      • 2021-12-17
      • 2017-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      • 2018-08-15
      相关资源
      最近更新 更多