Tensorflow2 导入自定义预训练模型

网上大多数都是直接调用tf的内置application中的预训练模型,这里用自己训练好的预训练模型。
预训练模型的最后全连接层不要,只保留前面的捕捉特征的层且这些层权重冻结不参与接下来的训练。不冻结也可以,这样相当于从新训练,就没起到预训练模型的效果。
大致代码如下:

# 加载模型
base_model = tf.keras.models.load_model('model-best.h5')

# 得到最后一个全连接之前的层
last_layer = base_model.get_layer(index=len(base_model.layers)-2)

# 自定义加上全连接层
dense_layer = k.layers.Dense(4000, activation='relu')(last_layer.output)
dense_layer = k.layers.Dense(300, activation='relu')(dense_layer)
dense_layer = k.layers.Dense(params['output_dim'], activation='softmax')(dense_layer)

# 构建出新模型
model = k.Model(inputs=base_model.input, outputs=dense_layer)

# 冻结预训练的层
for i in range(len(model.layers)-3):
    model.layers[i].trainable = False

# 编译和训练
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x=train_x, y=train_y, batch_size=100, epochs=100, 
		validation_data=(val_x, val_y),
        verbose=1)

另外,我用网上一般的Sequential总是报错,不知道为什么

你可能感兴趣的:(机器学习)