torch.nn.Parameter是什么功能

在代码调试的时候出现一个新的类torch.nn.Parameter。

这个类的对象呈现一种奇怪的数据结构。

v就是这个类的对象,其下面有T、data两个tensor变量,但是当我点开T的时候,如下图:

 

无限套娃就诞生了。

链接https://zhuanlan.zhihu.com/p/119305088给出了解释, 

他说是权重和偏置,总之是网络模型的参数,我先使用该链接下的代码。

import torch
class Net(torch.nn.Module):  # 继承torch的module
    def __init__(self, n_feature, n_hidden, n_output):
        super(Net, self).__init__()  # 继承__init__功能
        # 定义每一层用什么样的样式
        print('__init__',n_feature, n_hidden, n_output)
        self.hidden1 = torch.nn.Linear(n_feature, n_hidden)  # 隐藏层线性输出
        self.hidden2 = torch.nn.Linear(n_hidden, n_hidden)  # 隐藏层线性输出
        self.predict = torch.nn.Linear(n_hidden, n_output)  # 输出层线性输出

    def forward(self, x):
        # 激励函数(隐藏层的线性值)
        print('forword',x)
        x = torch.relu(self.hidden1(x))
        x = torch.relu(self.hidden2(x))
        x = self.predict(x)  # 输出值
        return x


net = Net(2, 5, 3)
print(net)
print('parameters',net.parameters())
paras = list(net.parameters())
for num,para in enumerate(paras):
    print('number:',num)
    print(para)
    print('_____________________________')

 其代码是可以直接运行的,这是大佬。

结果如下

__init__ 2 5 3
Net(
  (hidden1): Linear(in_features=2, out_features=5, bias=True)
  (hidden2): Linear(in_features=5, out_features=5, bias=True)
  (predict): Linear(in_features=5, out_features=3, bias=True)
)
parameters <generator object Module.parameters at 0x00000200687A5408>
number: 0
Parameter containing:
tensor([[ 0.0423,  0.6673],
        [ 0.6423, -0.1774],
        [ 0.5547,  0.6566],
        [-0.5234, -0.6513],
        [ 0.1191,  0.0325]], requires_grad=True)
_____________________________
number: 1
Parameter containing:
tensor([-0.4112,  0.6212, -0.2099, -0.4402, -0.1644], requires_grad=True)
_____________________________
number: 2
Parameter containing:
tensor([[ 0.2198, -0.3838, -0.0399, -0.1003,  0.0175],
        [-0.0473, -0.3794,  0.3303, -0.0807,  0.4304],
        [ 0.0542,  0.0590, -0.2011,  0.1565, -0.2727],
        [ 0.1961, -0.1922, -0.0582,  0.0209, -0.0853],
        [-0.3766,  0.1536,  0.1010,  0.2902, -0.4002]], requires_grad=True)
_____________________________
number: 3
Parameter containing:
tensor([-0.1840, -0.2318,  0.3049, -0.3105, -0.0961], requires_grad=True)
_____________________________
number: 4
Parameter containing:
tensor([[ 0.1130,  0.4425, -0.0165, -0.3688,  0.3431],
        [ 0.4186, -0.0953,  0.0408,  0.1480, -0.1418],
        [-0.3378,  0.0450, -0.3924,  0.3295, -0.3048]], requires_grad=True)
_____________________________
number: 5
Parameter containing:
tensor([ 0.0833, -0.4250, -0.3556], requires_grad=True)
_____________________________

实际上看最前面的结果就知道了。

__init__ 2 5 3
Net(
  (hidden1): Linear(in_features=2, out_features=5, bias=True)
  (hidden2): Linear(in_features=5, out_features=5, bias=True)
  (predict): Linear(in_features=5, out_features=3, bias=True)
)
parameters <generator object Module.parameters at 0x00000200687A5408>

2,5,3分别是神经网络的层数。

而Parameter是2*5,5*1,5*5,5*1,5*3

为什么要之间夹着5*1呢,我推测是为了归一化

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值