【问题标题】:ValueError: Input arrays should have the same number of samples as target arrays. in training sectionValueError:输入数组应具有与目标数组相同数量的样本。在训练部分
【发布时间】:2020-03-04 08:00:50
【问题描述】:

值错误

我有 5722 张图片用于训练,在处理时显示错误:ValueError:输入数组应具有与目标数组相同数量的样本。找到 5722 个输入样本和 312 个目标样本。

  • 5722 张图像属于训练集中的 12 个类别。
  • 312 张图片属于验证集中的 12 个类别。
start = datetime.datetime.now()
model = Sequential() 
model.add(Flatten(input_shape=train_data.shape[1:])) 
model.add(Dense(100, activation=keras.layers.LeakyReLU(alpha=0.3))) 
model.add(Dropout(0.5)) 
model.add(Dense(50, activation=keras.layers.LeakyReLU(alpha=0.3))) 
model.add(Dropout(0.3)) 
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy',
   optimizer=optimizers.RMSprop(lr=1e-4),
   metrics=['acc'])
history = model.fit(train_data, train_labels, 
   epochs=7,
   batch_size=batch_size, 
   validation_data=(validation_data, validation_labels))
model.save_weights(top_model_weights_path)
(eval_loss, eval_accuracy) = model.evaluate( 
    validation_data, validation_labels, batch_size=batch_size,     verbose=1)

数值错误

找到 5722 个输入样本和 312 个目标样本。

/usr/local/lib/python3.6/dist-packages/keras/activations.py:235: UserWarning: Do not pass a layer instance (such as LeakyReLU) as the activation argument of another layer. Instead, advanced activation layers should be used just like any other layer in a model.
      identifier=identifier.__class__.__name__))
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-22-9fbdd01293a7> in <module>()
         13    epochs=7,
         14    batch_size=batch_size,
    ---> 15    validation_data=(validation_data, validation_labels))
         16 model.save_weights(top_model_weights_path)
         17 (eval_loss, eval_accuracy) = model.evaluate( 
    
    2 frames
    /usr/local/lib/python3.6/dist-packages/keras/engine/training_utils.py in check_array_length_consistency(inputs, targets, weights)
        242                          'the same number of samples as target arrays. '
        243                          'Found ' + str(list(set_x)[0]) + ' input samples '
    --> 244                          'and ' + str(list(set_y)[0]) + ' target samples.')
        245     if len(set_w) > 1:
        246         raise ValueError('All sample_weight arrays should have '
    
    ValueError: Input arrays should have the same number of samples as target arrays. Found 5722 input samples and 312 target samples.

【问题讨论】:

  • 您能展示一下您是如何加载验证数据的吗?或者至少是np.shape(validation_data)np.shape(validation_labels)的输出
  • VGG16验证标签导入和预训练的文本数据和验证数据包含类名
  • 没有更多细节很难判断,但您似乎混合了训练和验证数据

标签: python tensorflow keras conv-neural-network


【解决方案1】:

我找到了解决这个问题的方法。它是输入的长度必须相同。因此,我将输入数据修改为相同的长度,以及输出。

例如,我通过预处理数据将两个输入的长度设置为 12。

Example Link

 history = model.fit(X_train.as_matrix(), y_train,
        batch_size=batch_size,
        epochs=epochs,
        verbose=1,
        validation_data=(X_test.as_matrix(), y_test))

【讨论】:

    猜你喜欢
    • 2018-07-10
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 2023-03-10
    • 2019-05-30
    • 2018-10-15
    • 1970-01-01
    相关资源
    最近更新 更多