ValueError: Входные массивы должны иметь то же количество выборок, что и целевые массивы. Найдено 32 входных и 128 целевых образцов - PullRequest
0 голосов
/ 05 мая 2018

Я следую этому уроку здесь, чтобы выполнить классификацию изображений. Ссылка: [Классификация изображений Keras] [1]

Я расширил код до 8 классов, но получил следующую ошибку:

ValueError: Input arrays should have the same number of samples as target arrays. Found 32 input samples and 128 target samples

Код модели моего поезда выглядит следующим образом:

def train_top_model():
   train_data = np.load(open('bottleneck_features_train', 'rb'))
   train_labels = np.array([0] * (nb_train_samples // 8) + [1] * (nb_train_samples // 8) + [2] * (nb_train_samples // 8) + [3] * (nb_train_samples // 8) + [4] * (nb_train_samples // 8) + [5] * (nb_train_samples // 8) + [6] * (nb_train_samples // 8) + [7] * (nb_train_samples // 8))
   validation_data = np.load(open('bottleneck_features_validation', 'rb'))
   validation_labels = np.array([0] * (nb_train_samples // 8) + [1] * (nb_train_samples // 8) + [2] * (nb_train_samples // 8) + [3] * (nb_train_samples // 8) + [4] * (nb_train_samples // 8) + [5] * (nb_train_samples // 8) + [6] * (nb_train_samples // 8) + [7] * (nb_train_samples // 8))
   train_labels = keras.utils.to_categorical(train_labels, num_classes = 8)
   validation_labels = keras.utils.to_categorical(validation_labels, num_classes = 8)
   model = Sequential()
   model.add(Flatten(input_shape=train_data.shape[1:]))
   model.add(Dense(512, activation='relu'))
   model.add(Dropout(0.5))
   model.add(Dense(8, activation='softmax'))
   sgd = SGD(lr=1e-2, decay=0.00371, momentum=0.9, nesterov=False)
   model.compile(optimizer=sgd,
         loss='categorical_crossentropy', metrics=['accuracy'])
   model.fit(train_data, train_labels,
          epochs=epochs,
          batch_size=batch_size,
   validation_data=(validation_data, validation_labels))
   model.save_weights(top_model_weights_path)

Я думаю, что ошибка пытается сказать, что на входе должно быть 128 сэмплов, но он получает только 32. Я не уверен в причине, потому что я тоже получаю это Found 128 images belonging to 8 classes. Я думаю, это указывает на то, что он успешно получил все 128 изображений.

Может кто-нибудь помочь? Большое спасибо!

1 Ответ

0 голосов
/ 05 мая 2018

Keras жалуется, что у вас есть 32 изображения в наборе проверки, в то время как ваши метки проверки состоят из 128 элементов, потому что вы предположительно забыли изменить nb_train_samples на nb_validation_samples, поэтому, чтобы исправить это, инициализируйте метки проверки с nb_validation_samples.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...