Aru*_*run 6 python neural-network pytorch
我使用 Python 3.8 和 PyTorch 1.7 手动分配和更改神经网络的权重和偏差。作为示例,我定义了一个 LeNet-300-100 全连接神经网络来在 MNIST 数据集上进行训练。类定义的代码为:
class LeNet300(nn.Module):
def __init__(self):
super(LeNet300, self).__init__()
# Define layers-
self.fc1 = nn.Linear(in_features = input_size, out_features = 300)
self.fc2 = nn.Linear(in_features = 300, out_features = 100)
self.output = nn.Linear(in_features = 100, out_features = 10)
self.weights_initialization()
def forward(self, x):
out = F.relu(self.fc1(x))
out = F.relu(self.fc2(out))
return self.output(out)
def weights_initialization(self):
'''
When we define all the modules such as the layers in '__init__()'
method above, these are all stored in 'self.modules()'.
We go through each module one by one. This is the entire network,
basically.
'''
for m in self.modules():
if isinstance(m, nn.Linear):
nn.init.xavier_normal_(m.weight)
nn.init.constant_(m.bias, 0)
Run Code Online (Sandbox Code Playgroud)
尝试改变该模型的权重 -
# Instantiate model-
mask_model = LeNet300()
Run Code Online (Sandbox Code Playgroud)
要将每一层中的所有权重分配给一 (1),我使用代码-
with torch.no_grad():
for layer in mask_model.state_dict():
mask_model.state_dict()[layer] = nn.parameter.Parameter(torch.ones_like(mask_model.state_dict()[layer]))
# Sanity check-
mask_model.state_dict()['fc1.weight']
Run Code Online (Sandbox Code Playgroud)
此输出表明权重不等于 1。
我也尝试过代码-
for param in mask_model.parameters():
# print(param.shape)
param = nn.parameter.Parameter(torch.ones_like(param))
Run Code Online (Sandbox Code Playgroud)
但这也行不通。
帮助?
小智 8
for param in mask_model.parameters():
param.data = nn.parameter.Parameter(torch.ones_like(param))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13718 次 |
| 最近记录: |