Keras | Как запустить пример Inception v3
Я пытаюсь изучить синтаксис Keras и играть с Вводным примером v3
У меня есть 4-классная многоклассовая игрушка для классификации, поэтому я изменил следующие строки из примера:
NB_CLASS = 4 # number of classes
DIM_ORDERING = 'tf' # 'th' (channels, width, height) or 'tf' (width, height, channels)
Мои наборы игрушек имеют следующие размеры:
- Размер массива, содержащий все изображения: (595, 299, 299, 3)
- Размер массива, содержащего учебные изображения: (416, 299, 299, 3)
- Размер массива, содержащего метки тренировки: (179, 4)
- Размер массива, содержащего тестовые изображения: (179, 299, 299, 3)
- Размер массива, содержащий тестовые метки: (179, 4)
Затем я попытаюсь обучить модель следующим кодом:
# fit the model on the batches generated by datagen.flow()
# https://github.com/fchollet/keras/issues/1627
# http://keras.io/models/sequential/#sequential-model-methods
checkpointer = ModelCheckpoint(filepath="/tmp/weights.hdf5", verbose=1, save_best_only=True)
model.fit_generator(datagen.flow(X_train, Y_train,
batch_size=32),
nb_epoch=10,
samples_per_epoch=32,
class_weight=None, #classWeights,
verbose=2,
validation_data=(X_test, Y_test),
callbacks=[checkpointer])
Затем я получаю следующую ошибку:
Exception: The model expects 2 input arrays, but only received one array. Found: array with shape (179, 4)`
Скорее всего, это связано с тем, что Inception хотел бы иметь вспомогательные классификаторы (Szegedy et al., 2014):
model = Model(input=img_input, output=[preds, aux_preds])
Как присвоить две метки методу в Keras, не являющемся продвинутым программистом на Python?
Ответы
Ответ 1
Я рекомендую сначала попробовать этот учебник. Код можно найти здесь.
В первой части вы увидите, как загрузить данные из каталога, используя:
.flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary')
Чтобы вводить разные классы, вам нужно поместить изображения в одну папку для каждого класса (обратите внимание, что, возможно, есть еще один способ сделать это, передав метки). Также обратите внимание, что в вашем случае class_mode не может использовать "двоичный" (я думаю, вы должны использовать "категориальный" ):
`"binary"`: binary targets (if there are only two classes),
`"categorical"`: categorical targets,
Затем вы можете использовать модель inceptionv3, которая уже находится в Keras:
from keras.applications import InceptionV3
cnn = InceptionV3(...)
Также обратите внимание, что у вас слишком мало примеров для обучения InceptionV3, так как эта модель очень большая (проверьте здесь размер). Что вы можете сделать в этом случае, это передача обучения, используя предварительно подготовленные веса на InceptionV3. См. Раздел Использование узких мест в обученной сети: точность в 90% в минуту учебник.