Я хочу использовать наснет для классификации только 2 классов.Наснет выбрасывает некоторые ошибки на одном из слоев.Поэтому я пытаюсь обучить наснет на наборе данных cifar, предоставленном в Keras - он также выдает ошибку.Кто-нибудь имел опыт использования nasnet для нестандартного размера изображения и нестандартного размера класса?
Я использую nasnet от keras, а также cifar, поставляемый с keras.Версии:
Keras 2.2.4
Keras-Applications 1.0.7
Keras-Preprocessing 1.0.9
tf-estimator-nightly 1.14.0.dev2019022501
tf-nightly-gpu 1.13.0.dev20190225
Код-и ошибка - для проверки nasnet на cifar10:
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
scales = keras.applications.nasnet.NASNetLarge(input_shape=(32,32,3), include_top=False, weights=None, classes=10)
scales.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'] )
scales.fit(x=x_train, y=y_train, batch_size=16, epochs=15, verbose=1, validation_data=(x_test, y_test))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.5/dist-packages/keras/engine/training.py", line 952, in fit
batch_size=batch_size)
File "/usr/local/lib/python3.5/dist-packages/keras/engine/training.py", line 789, in _standardize_user_data
exception_prefix='target')
File "/usr/local/lib/python3.5/dist-packages/keras/engine/training_utils.py", line 128, in standardize_input_data
'with shape ' + str(data_shape))
ValueError: Error when checking target: expected activation_2465 to have 4 dimensions, but got array with shape (50000, 1)
аналогично, если используются изображения с формой по умолчанию (331,331,3), но только 2 класса на основе локальныхнабор данных:
# custom code
...
scales = keras.applications.nasnet.NASNetLarge(input_shape=(331,331,3), include_top=False, weights=None, classes=2)
...
# custom code
history_callback = scales.fit_generator(train_generator,
steps_per_epoch=1600,
epochs=150,
callbacks=[early_stopper, tensorboard, checkpointer],
validation_data=(x_val, y_val),
class_weight=classWeight)
include_top=False, weights=None, classes=2)
Traceback (most recent call last):
File "train_oppdrett.py", line 306, in <module>
do_train()
File "train_oppdrett.py", line 204, in do_train
class_weight=classWeight)
File "/usr/local/lib/python3.5/dist-packages/keras/legacy/interfaces.py", line 91, in wrapper
return func(*args, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/keras/engine/training.py", line 1418, in fit_generator
initial_epoch=initial_epoch)
File "/usr/local/lib/python3.5/dist-packages/keras/engine/training_generator.py", line 144, in fit_generator
val_x, val_y, val_sample_weight)
File "/usr/local/lib/python3.5/dist-packages/keras/engine/training.py", line 789, in _standardize_user_data
exception_prefix='target')
File "/usr/local/lib/python3.5/dist-packages/keras/engine/training_utils.py", line 128, in standardize_input_data
'with shape ' + str(data_shape))
ValueError: Error when checking target: expected activation_640 to have 4 dimensions, but got array with shape (890, 2)
Theres много слоев в nasnet.Что происходит в активации_2465 активации_640.Кто-нибудь испытывал использование nasnet с другим размером изображения и другим количеством классов, чем для imagenet?Как должен быть настроен наснет?
Nasnet кажется менее настраиваемым, чем, например, InceptionV3.