是否可以在训练期间为选定的神经元固定一些权重?如果是?我该怎么做?

问题描述 投票:0回答:2

我有一个包含多个层的神经网络,但在其中一层中,我需要改变一些神经元的权重和偏差(w 和 b) 然而,允许同一层中其他神经元的其他 w 和 b训练过程中的变化。我正在使用 PyTorch。

所以假设n层有X1 + X2 = X神经元。我需要修复 X1 神经元的 w 和 b,并让其他 X2 神经元在训练过程中发生变化。

一个简单的入门想法会对我有好处,甚至如何去做!

我曾尝试使用

LocallyConnected1D
层,但网络的可视化描绘了与我需要的非常不同的东西。

machine-learning deep-learning pytorch neural-network
2个回答
0
投票

来自 PyTorch 示例,使用经过训练的 CNN 作为单层感知器的固定特征提取器,执行以下操作:

model_conv = torchvision.models.resnet18(weights='IMAGENET1K_V1')
for param in model_conv.parameters():
    param.requires_grad = False

冻结

model_conv
的参数。 PyTorch 网站上的示例然后继续将
model_conv
的输出传递给像往常一样训练的
Linear
层。

根据

requires_grad
参数的文档,这是冻结部分模型的推荐方法:

设置 requires_grad 应该是控制模型的哪些部分是梯度计算的一部分的主要方式,例如,如果您需要在模型微调期间冻结部分预训练模型。

通过在上面的示例中添加

if
条件,您应该能够仅冻结一些参数,同时保留其他参数。


-1
投票
 for name, parameter in yournetwork.named_parameters():
     if 'key' in name:
         parameter.requires_grad = False

您可以将“键”更改为您要修复的参数,此操作将冻结您选择的层的权重。

© www.soinside.com 2019 - 2024. All rights reserved.