pytorch.nn.init提供了很多初始化权重的函数,但是我有时候想直接修改某个module的weight怎么办呢?
目前这种方式是有效的
new_weight = torch.empty_like(the_module.weight)
new_weight=my_weight_method(new_weight)
new_weight=torch.nn.Parameter(new_weight)
the_module.weight=new_weight
对weight[i][j]直接操作会报错,比如:
weight[i][j]=torch.nn.Parameter(torch.tensor(2.))
#ValueError: can't optimize a non-leaf Tensor
这种方法不会报错,但无法修改weight:
weight[i][j].data=torch.nn.Parameter(torch.tensor(2.))
one more thing
weight的类型为torch.nn.parameter.Parameter,必须是一个浮点数类型的tensor