gpt4 book ai didi

machine-learning - 如何重置迁移学习的特定层权重?

转载 作者:行者123 更新时间:2023-11-30 08:39:35 25 4
gpt4 key购买 nike

我正在寻找一种在现有 keras 预训练模型中重新初始化层权重的方法。

我正在将 python 与 keras 一起使用,并且需要使用迁移学习,我使用以下代码加载预训练的 keras 模型

from keras.applications import vgg16, inception_v3, resnet50, mobilenet
vgg_model = vgg16.VGG16(weights='imagenet')

我读到,当使用与原始数据集非常不同的数据集时,在训练网络中的较低级别特征上创建新层可能会有好处。

我找到了如何允许 fine tuning参数,现在我正在寻找一种方法来重置选定的图层以使其重新训练。我知道我可以创建一个新模型并使用第 n-1 层作为输入并向其中添加第 n 层,但我正在寻找一种方法来重置现有模型中现有层中的参数。

最佳答案

无论出于何种原因,您可能想要重新初始化单层k的权重,以下是执行此操作的通用方法:

from keras.applications import vgg16
from keras import backend as K

vgg_model = vgg16.VGG16(weights='imagenet')
sess = K.get_session()

initial_weights = vgg_model.get_weights()

from keras.initializers import glorot_uniform # Or your initializer of choice

k = 30 # say for layer 30
new_weights = [glorot_uniform()(initial_weights[i].shape).eval(session=sess) if i==k else initial_weights[i] for i in range(len(initial_weights))]

vgg_model.set_weights(new_weights)

您可以轻松验证 initial_weights[k]==new_weights[k] 返回一个 False 数组,而 initial_weights[i]==new_weights[ i] 对于任何其他 i 都会返回一个 True 数组。

关于machine-learning - 如何重置迁移学习的特定层权重?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52425359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com