Deep learning 深度学习拟合错误(传递给模型的Numpy数组列表的大小不是模型预期的大小。)

Deep learning 深度学习拟合错误(传递给模型的Numpy数组列表的大小不是模型预期的大小。),deep-learning,keras,kaggle,Deep Learning,Keras,Kaggle,我对深度学习还不熟悉。我正在尝试跟随系列讲座,并尝试在Kaggle内核中手动复制工作 我正在尝试在卡格尔的《猫与狗》中重演。我不关心准确性,我只是想让一些东西发挥作用 我正在使用Keras和VGG16模型,如fast.ai课程中所述 我在尝试拟合我的模型时遇到了一个错误,我不知道如何解释: --------------------------------------------------------------------------- ValueError

我对深度学习还不熟悉。我正在尝试跟随系列讲座,并尝试在Kaggle内核中手动复制工作

我正在尝试在卡格尔的《猫与狗》中重演。我不关心准确性,我只是想让一些东西发挥作用

我正在使用Keras和VGG16模型,如fast.ai课程中所述

我在尝试拟合我的模型时遇到了一个错误,我不知道如何解释:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-26-596f25281fc2> in <module>()
     12 #model.fit(input[0].transpose(), output[0].transpose())
     13 
---> 14 model.fit(X, Y, epochs=100, batch_size=6000, verbose=1)

/opt/conda/lib/python3.6/site-packages/Keras-2.1.2-py3.6.egg/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, **kwargs)
   1591             class_weight=class_weight,
   1592             check_batch_axis=False,
-> 1593             batch_size=batch_size)
   1594         # Prepare validation data.
   1595         do_validation = False

/opt/conda/lib/python3.6/site-packages/Keras-2.1.2-py3.6.egg/keras/engine/training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, check_batch_axis, batch_size)
   1428                                     output_shapes,
   1429                                     check_batch_axis=False,
-> 1430                                     exception_prefix='target')
   1431         sample_weights = _standardize_sample_weights(sample_weight,
   1432                                                      self._feed_output_names)

/opt/conda/lib/python3.6/site-packages/Keras-2.1.2-py3.6.egg/keras/engine/training.py in _standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
     81                 'Expected to see ' + str(len(names)) + ' array(s), '
     82                 'but instead got the following list of ' +
---> 83                 str(len(data)) + ' arrays: ' + str(data)[:200] + '...')
     84         elif len(names) > 1:
     85             raise ValueError(

ValueError: Error when checking model target: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 1 array(s), but instead got the following list of 24500 arrays: [array([[1],
       [0]]), array([[1],
       [0]]), array([[0],
       [1]]), array([[1],
       [0]]), array([[1],
       [0]]), array([[1],
       [0]]), array([[1],
       [0]]), array([[0],
     ...
模型:

model = VGG16(weights='imagenet', include_top=False, input_shape=(img_rows, img_cols, img_channel))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, epochs=100, batch_size=6000, verbose=1)

我在谷歌上搜索过,但我不知道该如何解释这个。这似乎类似,似乎表明输出是问题所在,但我不确定这将如何应用于我这里。

您应该简单地将Y转换为具有形状(24500,2)的numpy数组:


然后我得到了“ValueError:sequence太大;不能大于32”-知道这意味着什么吗?@thekevinscott啊,是的,如果列表中的子数组超过32个,它就不起作用了。在数据集加载期间,您应该使用所提到的形状创建一个numpy数组,并用标签手动填充它。我下面的教程使用文件名生成一个表示“dog,cat”的单热数组([0,1])。我将以np.array的形式生成标签,它似乎与ndarray是一样的?()我还用model.summary()更新了我的问题,尽管我看不到Y(标签)输入在模型中的定义位置?@thekevinscott我想你是在尝试从数据数组列表而不是列表创建数据数组。使用np.concatenate来连接numpy数组列表,您应该可以开始了
model = VGG16(weights='imagenet', include_top=False, input_shape=(img_rows, img_cols, img_channel))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, Y, epochs=100, batch_size=6000, verbose=1)
Y = np.ndarray(Y)