Используйте fit_generator и ImageDataGenerator с несколькими входами - PullRequest
0 голосов
/ 22 апреля 2019

Я пишу модель с двумя входами и одним выходом.

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]

Это тоже работает, но результаты кажутся странными для моих данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...