gpt4 book ai didi

python - 如何仅将权重设置为 keras 中神经元前半部分的层?

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

我进行的训练类(class)获得了 70% 的 acc 并节省了重量。

我现在想要加载这些权重,从 LSTM 这个模型(三层中每一层都有 (32, 32, 16) 输出)加载到同一模型,但有 (64, 64, 32) 输出。有 4 层,最后一层是有 8 个输出的 softmax,没有改变。

如何将权重的“前半部分”加载到这个新模型中?

我正在尝试使用最后一次训练类(class)来使网络从某个地方开始,因为训练时间变得如此之多,而我的显卡不太适合训练,并且需要花费大量时间。

最佳答案

您可以在同一模型中加载权重(不是大模型,而是小模型),或者您可以简单地将它们加载为 numpy 数组(我不太习惯在 Keras 中保存和加载)

如果您在模型中加载了权重,请找到各层并获取 numpy 数组形式的权重:

#for each layer: 
weightsAndBiases = smallModel.layers[i].get_weights()
#this is a list with [weights, biases] for the layer i,
#may have more elements depending on the type of layer

然后,如果您希望更大的模型从一些 keras 初始化开始(可能比零或一或手动初始化更好),请在创建大模型后获取权重:

bigWandB = bigModel.layers[i].get_weights()
#if not, just create a numpy array with the right shape

现在将数据从 weightsAndBiases 传输到 bigWandB

这个例子使用了你给出的形状,但是你实际上应该检查每个数组的形状,它们与输出不匹配,并且每种层都有自己的形状。 (请注意,有些层可能只有一个数组,有些可能有两个,即经典的权重和偏差,而 LSTM 层可能有 3 个 - 检查列表的长度):

bigWandB[0][:32,:32,:16] = weightsAndBiases[0] #weights for one layer   
bigWandB[1][:32,:32,:16] = weightsAndBiases[1] #biases for the same layer

现在再次将其设置为目标图层:

bigModel.layers[i].set_weights(bigWandB)

关于python - 如何仅将权重设置为 keras 中神经元前半部分的层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44861148/

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