Я пишу модель с двумя входами и одним выходом.
img_input = Input(shape = (224,224,3))
x = VGG16(weights='imagenet',include_top = False)(img_input)
out = GlobalAveragePooling2D()(x)
shared_model = Model(img_input, out)
img_t1 = Input(shape = (224,224,3),name = 'img_t1')
img_t2 = Input(shape = (224,224,3),name = 'img_t2')
out_t1 = shared_model(img_t1)
out_t2 = shared_model(img_t2)
concatenated = concatenate([out_t1,out_t2])
out = Dense(1024,activation = 'relu',name = 'fc_1')(concatenated)
out = Dense(1, activation='sigmoid',name='output')(out)
model_a = Model([img_t1,img_t2],out)
Для увеличения изображения я использую:
datagen = ImageDataGenerator(
width_shift_range=0.2,
......
shear_range=0.2
)
Заходи на model.fit (), пытаюсьэто:
model.fit_generator(datagen.flow([X_t1,X2_t2],Y,batch_size=32),shuffle=True,
validation_data=([X_test_t1,X_test_t2],Y_test,worker=40,verbose=1,callbacks=callbacks)
Работает без ошибок и предупреждений.Но я не знаю, действительно ли это работает с увеличением?Результаты, кажется, хорошо.Я нашел несколько решений об использовании fit_generator с несколькими входами, они используют:
def generator_two_img(X1, X2, y, batch_size):
genX1 = gen.flow(X1, y, batch_size=batch_size, seed=1)
genX2 = gen.flow(X2, y, batch_size=batch_size, seed=1)
while True:
X1i = genX1.next()
X2i = genX2.next()
yield [X1i[0], X2i[0]], X1i[1]
Это тоже работает, но результаты кажутся странными для моих данных.