You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何复用Keras函数式模型层基于预训练模型实现迁移学习

Keras预训练自编码器迁移学习实现方案

前置修正说明

你提供的初始示例代码存在两个语法错误,运行前需要先修复:

  • 输出层的激活函数参数名拼写错误:acitvation → activation
  • 模型实例化类名首字母需要大写:keras.model → keras.Model

迁移学习实现步骤

  1. 加载本地保存的预训练去噪自编码器模型
  2. 将原模型所有层的trainable属性设置为False,完成权重冻结
  3. 截取原模型去掉最后一层后的输出作为特征输出
  4. 基于该特征输出拼接自定义的新层,构建新的迁移学习模型
  5. 编译新模型后在目标数据集上训练即可

完整实现代码

import tensorflow as tf
import keras

def new_model():
    # 加载预训练的自编码器模型
    old_model = keras.models.load_model('../best_model.h5')
    
    # 冻结原模型所有层参数
    for layer in old_model.layers:
        layer.trainable = False
    
    # 截取原模型去掉最后一层的输出
    # 如果你需要调整截取的层位置,修改索引即可,-1代表最后一层,-2代表倒数第二层
    feature_output = old_model.layers[-2].output
    
    # 在这里添加你需要的新层,示例添加2层全连接层,可根据需求修改
    x = keras.layers.Dense(32, activation='relu')(feature_output)
    x = keras.layers.Dense(16, activation='relu')(x)
    # 最后一层根据你的任务设置输出维度和激活函数,示例做10分类就设为10+softmax
    new_output = keras.layers.Dense(10, activation='softmax')(x)
    
    # 构建新模型,输入和原模型一致,输出为新定义的输出
    transfer_model = keras.Model(inputs=old_model.input, outputs=new_output)
    return transfer_model

# 实例化新模型
model = new_model()

# 编译模型,损失函数和评估指标根据你的任务调整,示例为分类任务
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# 训练模型,传入你的数据集X和y
chk_point = keras.callbacks.ModelCheckpoint(f'./transfer_best_model.h5', 
                            monitor='val_loss', save_best_only=True, mode='min')
model.fit(X, y, batch_size=32, epochs=50, validation_split=0.2, callbacks=[chk_point])

补充说明

  • 如果你的自编码器结构里有BatchNormalization等特殊层,冻结后训练时默认会适配运行逻辑,避免非训练状态下的均值方差更新
  • 如果你后续需要微调解冻部分层,只需要把对应层的trainable设置为True,调低学习率重新编译训练即可

内容的提问来源于stack exchange,提问作者Ankit Kalauni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:06:08