Значение истинности массива с более чем одним элементом неоднозначно. Используйте a.any() или a.all() в задаче классификации изображений

#python-3.x #image-processing #deep-learning #computer-vision

#python-3.x #обработка изображений #глубокое обучение #компьютерное зрение

Вопрос:

Я выполнял классификацию изображений с использованием предопределенной модели vgg16, я получил 89% точности в данных проверки, чтобы повысить точность модели, я увеличил изображение, но получил некоторые ошибки. пожалуйста, помогите мне, как подогнать под модель. вот мой код.

 train_datagen = ImageDataGenerator(
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True)

train_datagen.fit(X_train)
  

Я использую входное изображение размером 64x64x3.
Мне подходит такая модель.

 history = model.fit_generator(
      train_datagen.flow(X_train,y_train),
      steps_per_epoch=(X_train)/32 ,
      epochs=30,
      validation_data=(X_test,y_test),
      validation_steps=(X_test)/32,
verbose=1)

Epoch 1/30
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-30-ff3a9aaa40da> in <module>()
      5       validation_data=(X_test,y_test),
      6       validation_steps=(X_test)/32,
----> 7 verbose=1)

/usr/local/lib/python3.6/dist-packages/keras/legacy/interfaces.py in wrapper(*args, **kwargs)
     89                 warnings.warn('Update your `'   object_name   '` call to the '  
     90                               'Keras 2 API: '   signature, stacklevel=2)
---> 91             return func(*args, **kwargs)
     92         wrapper._original_function = func
     93         return wrapper

/usr/local/lib/python3.6/dist-packages/keras/engine/training.py in fit_generator(self, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch)
   1416             use_multiprocessing=use_multiprocessing,
   1417             shuffle=shuffle,
-> 1418             initial_epoch=initial_epoch)
   1419 
   1420     @interfaces.legacy_generator_methods_support

/usr/local/lib/python3.6/dist-packages/keras/engine/training_generator.py in fit_generator(model, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch)
    178             steps_done = 0
    179             batch_index = 0
--> 180             while steps_done < steps_per_epoch:
    181                 generator_output = next(output_generator)
    182 

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
  

Ответ №1:

Ссылаясь на @jmetz, @suri, у вас та же проблема с вашим validation_steps параметром, которым вы его инициализировали (X_test)/32 (вероятно, не скалярный). Проверьте свои validation_steps.shape / len(validation_steps) и steps_per_epoch.shape / len(steps_per_epoch) (в зависимости от входных размеров). Они должны быть скалярами.

Ответ №2:

Похоже, что steps_per_epoch должно быть скалярным (одиночное значение).

Вы устанавливаете его равным (X_train)/32 .

Комментарии:

1. привет, jmetz, я имею в виду его для применения автоэнкодера к данным.

2. привет @suri — в любом случае, ошибка изнутри keras подразумевает, что steps_per_epoch должно быть единственное значение, и вы передаете массив, так что это причина проблемы.