在代码调试的时候出现一个新的类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呢,我推测是为了归一化
643

被折叠的 条评论
为什么被折叠?



