多输入Keras模型导致低精度(我的模型设置是否不正确?)

2024-05-15 04:00:52 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我第一次创建一个多输入keras模型,我不确定我是否做错了什么,因为我的训练准确率没有上升到50%以上。如果我使用单一输入模型,我可以很容易地达到90%以上。该模型采用相同输入但大小不同的输入,然后以softmax预测的最大值作为最终预测。所以,我认为训练模型会更容易。你知道吗

代码如下:

def full_model_2(model_key):
    base_model, preprocess = basemodel(model_key)  #base model is just an imported imagenet model
    base_model2, preprocess = basemodel(model_key)
for layer in base_model.layers:
    layer.name = layer.name + "dup"

#first model    
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(2048, activation='relu')(x)
x = BatchNormalization()(x)
x =  Dense(512, activation='relu')(x)
x = BatchNormalization()(x)
predictions_x = Dense(classes, activation='softmax')(x)

#second model
y = base_model2.output
y = GlobalAveragePooling2D()(y)
y = Dense(2048, activation='relu')(y)
y = BatchNormalization()(y)
y =  Dense(512, activation='relu')(y)
y = BatchNormalization()(y)
predictions_y = Dense(classes, activation='softmax')(y)
#predictions = Average()([predictions_x, predictions_y])
predictions = Maximum()([predictions_x, predictions_y])
model = Model(inputs= [base_model.input,base_model2.input], outputs=predictions)
for layer in model.layers[:-10]:
    layer.trainable = False
return model, preprocess

我的生成器看起来像这样(取两个生成器并创建两个输入)

def train_generator():
    train_gen, _ = create_generators(batch_size, preprocess, img_size)
    train_gen2, _ = create_generators(batch_size, preprocess, img_size2)
    print(train_gen.seed)
    print(train_gen2.seed)
    while True:
        X1i = train_gen.next()
        X2i = train_gen2.next()
        yield [X1i[0], X2i[0]], X1i[1]

以下是原始生成器函数:

train_datagen = ImageDataGenerator(preprocessing_function = preprocess)
    train_generator = train_datagen.flow_from_directory(
    train_data_dir,
    shuffle = True,
    seed = seed,
    target_size = (img_size, img_size),
    batch_size = batch_size, 
    class_mode = 'categorical')

return train_generator


 model.compile(optimizer= r_optimizer,
              loss='categorical_crossentropy',
              metrics = ['accuracy'])

我已经绘制了来自生成器的输入,我确实得到了相同的图像,但是大小不同,所以来自生成器的输入看起来是可以的。你知道吗

我在想我的模型设置关闭了。你知道吗

谢谢你的建议。你知道吗


Tags: 模型layerimgbasesizemodelbatchtrain

热门问题