Keras model.fit ValueError: 输入数组的样本数应与目标数组的样本数相同

我试图将从resnet50运行中获得的bottleneck_features加载到顶层模型中。我对resnet运行了predict_generator,并将生成的bottleneck_features保存到一个npy文件中。由于以下错误,我无法拟合我创建的模型:

    Traceback (most recent call last):  File "Labeled_Image_Recognition.py", line 119, in <module>    callbacks=[checkpointer])  File "/home/dillon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/keras/models.py", line 963, in fit    validation_steps=validation_steps)  File "/home/dillon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/keras/engine/training.py", line 1630, in fit    batch_size=batch_size)  File "/home/dillon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/keras/engine/training.py", line 1490, in _standardize_user_data    _check_array_lengths(x, y, sample_weights)  File "/home/dillon/anaconda3/envs/tensorflow/lib/python3.6/site-packages/keras/engine/training.py", line 220, in _check_array_lengths    'and ' + str(list(set_y)[0]) + ' target samples.')ValueError: Input arrays should have the same number of samples as target arrays. Found 940286 input samples and 14951 target samples.

我不太确定这意味着什么。我的训练目录中有940286张图片,这些图片被分到了14951个子目录中。我有两个假设:

  1. 有可能是我没有正确地格式化train_data和train_labels。
  2. 我的模型设置有误

任何指导都会非常感激!

这是代码:

# Constantsnum_train_dirs = 14951 #This is the total amount of classes I havenum_valid_dirs = 13168 def load_labels(path):    targets = os.listdir(path)    labels = np_utils.to_categorical(targets, len(targets))    return labelsdef create_model(train_data):    model = Sequential()    model.add(Flatten(input_shape=train_data.shape[1:]))    model.add(Dense(num_train_dirs, activation='relu'))    model.add(Dropout(0.2))    model.add(Dense(num_train_dirs, activation='softmax'))    model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])    return model    train_data = np.load(open('bottleneck_features/bottleneck_features_train.npy', 'rb'))train_labels = load_labels(raid_train_dir)valid_data = np.load(open('bottleneck_features/bottleneck_features_valid.npy', 'rb'))valid_labels = train_labelsmodel = create_model(train_data)model.summary()checkpointer = ModelCheckpoint(filepath='weights/first_try.hdf5', verbose=1, save_best_only=True)print("Fitting model...")model.fit(train_data, train_labels,     epochs=50,     batch_size=100,     verbose=1,     validation_data=(valid_data, valid_labels),     callbacks=[checkpointer])

回答:

在监督学习的情况下,输入样本(X)的数量必须与输出(标签)样本(Y)的数量相匹配。

例如:如果我们想训练一个神经网络来识别手写数字,并且我们向模型输入了10,000张图片(X),那么我们也应该传递10,000个标签(Y)。

在你的情况下,这些数字不匹配。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注