这是我第一次创建一个多输入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'])
我已经绘制了来自生成器的输入,我确实得到了相同的图像,但是大小不同,所以来自生成器的输入看起来是可以的。你知道吗
我在想我的模型设置关闭了。你知道吗
谢谢你的建议。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐