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

如何在不替换整个层的情况下修改Keras模型最后一层的激活函数

修改Keras模型最后一层激活函数(无需替换整个层)

嘿,我来帮你搞定这个需求!你想在不替换整个最后一层的前提下,把原本的softmax激活函数换成别的,其实操作很简单,直接修改层的属性再重新编译模型就行,具体步骤如下:

  • 第一步:加载模型并定位最后一层
    先把你的模型加载进来,然后通过model.layers[-1]获取最后一层:

    import keras.backend as K
    from keras.models import load_model
    from keras.preprocessing.image import load_img, img_to_array
    import numpy as np
    
    model = load_model(model_path)  # 加载你的模型
    last_layer = model.layers[-1]   # 获取最后一层
    
  • 第二步:修改激活函数
    直接给最后一层的activation属性赋值你想要的激活函数就行,比如换成sigmoid(你可以根据需求换成relu、tanh等):

    # 替换成你需要的激活函数,这里以sigmoid为例
    last_layer.activation = K.sigmoid
    
  • 第三步:重新编译模型
    这一步很关键!修改层属性后必须重新编译模型,才能让新的激活函数生效。你可以沿用模型原来的优化器、损失函数和评估指标:

    # 沿用原模型的编译参数
    model.compile(optimizer=model.optimizer,
                  loss=model.loss,
                  metrics=model.metrics)
    

    要是你不确定原参数,也可以直接指定新的,比如:

    model.compile(optimizer='adam',
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])
    
  • 第四步:测试修改后的模型
    接下来就可以用你原来的预测代码测试效果啦,注意如果模型需要批量输入,记得给图片扩展维度:

    img = load_img(img_path, target_size=(224, 224))
    img = img_to_array(img)
    img = np.expand_dims(img, axis=0)  # 扩展成批量维度
    print(model.predict(img))
    

小提醒:如果你的最后一层是自定义层,可能需要额外调整,但大部分预训练模型的全连接层都可以用这个方法直接修改哦!

内容的提问来源于stack exchange,提问作者Hardian Lawi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:33:38