Я построил модель , которая состоит из двух ветвей, которые затем объединены в один. Для обучения модели я хотел бы использовать ImageGenerator для обработки данных изображения, но не знаю, как сделать работу для смешанного типа ввода. У кого-нибудь есть идея, как справиться с этим в керасе? Любая помощь будет высоко оценена!Использование keras ImageGenerator для обучения нескольких моделей ввода
Лучший, Ник
МОДЕЛЬ первый Branchen принимает изображения в качестве входных сигналов:
img_model = Sequential()
img_model.add(Convolution2D(4, 9,9, border_mode='valid', input_shape=(1, 120, 160)))
img_model.add(Activation('relu'))
img_model.add(MaxPooling2D(pool_size=(2, 2)))
img_model.add(Dropout(0.5))
img_model.add(Flatten())
Вторая ветвь принимает вспомогательные данные в качестве входных данных:
aux_model = Sequential()
aux_model.add(Dense(3, input_dim=3))
Тогда те получают объединены в окончательной модели:
model = Sequential()
model.add(Merge([img_model, aux_model], mode='concat'))
model.add(Dropout(0.5))
model.add(Dense(5))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adadelta', metrics=['accuracy'])
ОБУЧЕНИЕ/ПРОБЛЕМА: я попытался сделать следующее, которое, очевидно, не удалось:
datagen = ImageDataGenerator(
featurewise_center=False, # set input mean to 0 over the dataset
samplewise_center=False, # set each sample mean to 0
featurewise_std_normalization=False, # divide inputs by std of the dataset
samplewise_std_normalization=False, # divide each input by its std
zca_whitening=False, # apply ZCA whitening
rotation_range=10, #180, # randomly rotate images in the range (degrees, 0 to 180)
width_shift_range=0.1, # randomly shift images horizontally (fraction of total width)
height_shift_range=0.1, # randomly shift images vertically (fraction of total height)
horizontal_flip=False, # randomly flip images
vertical_flip=False) # randomly flip images
model.fit_generator(datagen.flow([X,I], Y, batch_size=64),
samples_per_epoch=X.shape[0],
nb_epoch=20,
validation_data=([Xval, Ival], Yval))
Это производит следующее сообщение об ошибке:
Traceback (most recent call last):
File "importdata.py", line 139, in <module>
model.fit_generator(datagen.flow([X,I], Y, batch_size=64),
File "/usr/local/lib/python3.5/dist-packages/keras/preprocessing/image.py", line 261, in flow
save_to_dir=save_to_dir, save_prefix=save_prefix, save_format=save_format)
File "/usr/local/lib/python3.5/dist-packages/keras/preprocessing/image.py", line 454, in __init__
'Found: X.shape = %s, y.shape = %s' % (np.asarray(X).shape, np.asarray(y).shape))
File "/usr/local/lib/python3.5/dist-packages/numpy/core/numeric.py", line 482, in asarray
return array(a, dtype, copy=False, order=order)
ValueError: could not broadcast input array from shape (42700,1,120,160) into shape (42700)
Не работает для меня с ошибкой: 'ValueError: модель ожидает 2 входных массива, но получает только один массив. Найдено: массив с формой (0, 299, 299, 3) ' – Dmitry