在“使用PyTorch进行深度学习:60分钟的闪电战>神经网络”的pytorch教程步骤中
我有一个疑问,什么剂量表示网络中的params [1]?
我之所以这么想,是因为最大轮询剂量没有任何权重值。
例如。
如果您编写类似的代码 ' def init (自己): self.conv1 = nn.Conv2d(1,6,5) '
这意味着输入具有1个通道,6个输出通道,conv(5,5)
因此,我理解params [0]在初始化时具有6个通道,5 x 5矩阵随机映射值。
出于同样的原因
params [2]具有相同的形式,但是16通道。我也明白这一点。
但是params [1],什么意思?
也许这只是最大轮询存在的表示方法。
但是在本教程的最后,在“更新权重”的步骤中 可能会通过下面的代码进行更新。
learning_rate = 0.01
for f in net.parameters():
f.data.sub_(f.grad.data * learning_rate)
这是用于构建网络的代码
import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
# 1 input image channel, 6 output channels, 5x5 square convolution
# kernel
self.conv1 = nn.Conv2d(1, 6, 5)
self.conv2 = nn.Conv2d(6, 16, 5)
# an affine operation: y = Wx + b
self.fc1 = nn.Linear(16 * 5 * 5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
def forward(self, x):
# Max pooling over a (2, 2) window
x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
# If the size is a square you can only specify a single number
x = F.max_pool2d(F.relu(self.conv2(x)), 2)
x = x.view(-1, self.num_flat_features(x))
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
def num_flat_features(self, x):
size = x.size()[1:] # all dimensions except the batch dimension
num_features = 1
for s in size:
num_features *= s
return num_features
params = list(net.parameters())
print(params[1])
Parameter containing:
tensor([-0.0614, -0.0778, 0.0968, -0.0420, 0.1779, -0.0843],
requires_grad=True)
请访问pytorch教程网站。 https://pytorch.org/tutorials/beginner/blitz/neural_networks_tutorial.html#sphx-glr-beginner-blitz-neural-networks-tutorial-py
答案 0 :(得分:0)
您对此有误。它与max_pooling无关。 正如您在“链接的教程”中可以看到的那样,当“ nn.paramter” -Tensor分配给模块时,它会自动注册为参数。
从本质上讲,这意味着__init__
中列出的所有内容都是模块和参数,可以分配给它。
值在参数内部意味着什么,以及模型计算其步骤所需的参数。描绘它
params[0] -> self.conf1 -> Layer-Input
params[1] -> self.conf1 -> Layer-Output
params[2] -> self.conf2 -> Layer-Input
params[3] -> self.conf2 -> Layer-Output
params[4] -> self.fc1 -> Layer-Input
params[5] -> self.fc1 -> Layer-Output
依次类推,直到达到params [9],这就是整个参数列表的末尾。
编辑:忘记了重量 这些值表明您的网络学到了什么。 因此,您可以更改这些值,以便对网络进行微调以适应您的需求。
如果您问为什么每个图层需要2行? 好吧,当您进行反向传播时,您需要这些值来定位图层中的问题。 这就是为什么它存储在传递到图层之前,然后从该图层返回之后进行存储的原因。
希望现在情况变得更清楚了。