将fit_generator和ImageDataGenerator与多个输入一起使用

时间:2019-04-22 09:11:44

标签: python keras neural-network

我写了一个有两个输入和一个输出的模型。

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]

这也可以,但是结果对我的数据来说似乎很奇怪。

0 个答案:

没有答案