【问题标题】:How can I check parameters of Pytorch networks' layers?如何检查 Pytorch 网络层的参数?
【发布时间】:2022-01-04 07:07:34
【问题描述】:
import torch
import torch.nn as nn
from torch.optim import Adam

class NN_Network(nn.Module):
    def __init__(self,in_dim,hid,out_dim):
        super(NN_Network, self).__init__()
        self.linear1 = nn.Linear(in_dim,hid)
        self.linear2 = nn.Linear(hid,out_dim)


    def forward(self, input_array):
        h = self.linear1(input_array)
        y_pred = self.linear2(h)
        return y_pred

in_d = 5
hidn = 2
out_d = 3
net = NN_Network(in_d, hidn, out_d)

list(net.parameters())

结果是:

[Parameter containing:
 tensor([[-0.2948, -0.1261,  0.2525, -0.4162,  0.3067],
         [-0.2483, -0.3600, -0.4090,  0.0844, -0.2772]], requires_grad=True),
 Parameter containing:
 tensor([-0.2570, -0.3754], requires_grad=True),
 Parameter containing:
 tensor([[ 0.4550, -0.4577],
         [ 0.1782,  0.2454],
         [ 0.6931, -0.6003]], requires_grad=True),
 Parameter containing:
 tensor([ 0.4181, -0.2229, -0.5921], requires_grad=True)]

不使用 nn.Parameter,list(net.parmeters()) 结果作为参数。

我很好奇的是:

  1. 我没有使用nn.Parameter命令,为什么会这样?并且要检查任何网络层的参数,那么 .parameters() 是唯一的检查方法吗?

  2. 可能结果分别是self.linear1(in_dim,hid)的权重、偏差等。
    但是有没有办法检查它是什么?

【问题讨论】:

    标签: parameters pytorch


    【解决方案1】:

    您可以使用.named_parameters() 代替.parameters() 来获取有关模型的更多信息:

    for name, param in net.named_parameters():
        if param.requires_grad:
            print(name, param.data)
    

    结果:

    linear1.weight tensor([[ 0.3727,  0.2522,  0.2381,  0.3115,  0.0656],
            [-0.3322,  0.2024,  0.1089, -0.3370,  0.3917]])
    linear1.bias tensor([-0.2089,  0.1105])
    linear2.weight tensor([[-0.1090,  0.2564],
            [-0.3957,  0.6632],
            [-0.4036,  0.7066]])
    linear2.bias tensor([ 0.1398, -0.0585,  0.4297])
    

    【讨论】:

    • 那么state_dict和.parameters()有什么区别和用法吗?
    • 我认为这两个的区别只是返回类型,.state_dict() 返回字典和.named_parameters() 返回生成器。有一个讨论:stackoverflow.com/a/54747245/14815986
    猜你喜欢
    • 2023-02-17
    • 2021-08-17
    • 2018-07-01
    • 1970-01-01
    • 2018-09-01
    • 2019-06-01
    • 2018-10-19
    • 1970-01-01
    • 2020-12-17
    相关资源
    最近更新 更多