Python 最大池层具有权重。有趣的工作

Python 最大池层具有权重。有趣的工作,python,tensorflow,keras,pytorch,Python,Tensorflow,Keras,Pytorch,在Pytork教程中的“使用Pytork进行深入学习:60分钟闪电战>神经网络” 我有一个问题,网络中的参数[1]是什么意思 我之所以有这种想法,是因为max polling没有任何权重值 比如说 如果你写一些这样的代码 ' def初始化(自身): self.conv1=nn.Conv2d(1,6,5) " 这意味着输入有1个通道,6个输出通道,conv(5,5) 所以我知道,在初始化时,params[0]有6个通道,5×5个矩阵随机映射值 出于同样的原因 params[2]具有相同的形式,但有

在Pytork教程中的“使用Pytork进行深入学习:60分钟闪电战>神经网络”

我有一个问题,网络中的参数[1]是什么意思

我之所以有这种想法,是因为max polling没有任何权重值

比如说

如果你写一些这样的代码 ' def初始化(自身): self.conv1=nn.Conv2d(1,6,5) "

这意味着输入有1个通道,6个输出通道,conv(5,5)

所以我知道,在初始化时,params[0]有6个通道,5×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



请访问此pytorch教程网站。


总结

我有一个问题

这就是为什么最大池层有四个可以更新的权重

我认为他们不应该有任何重量,对吗

我错了吗


请帮帮我。我是韩国人。

你错了。这与max_池无关。 正如您在“链接”教程中所读到的,“nn.parameter”-张量在分配给模块时是否自动注册为参数

在您的例子中,这基本上意味着
\uuuu init\uuuu
中列出的所有内容都是一个模块,可以为其分配参数

参数内的值意味着什么,这是模型计算其步长所需的参数。想象一下

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行? 嗯,当您进行反向传播时,您需要这些值来定位层中的问题。 这就是为什么它在传递到层之前存储,然后从该层返回之后存储


希望事情现在更清楚一点。

这意味着从列表中获取第一个元素。我知道。我的问题是。参数[1]的值意味着什么?最大池网络没有权重。但是params[1]是有价值的。它们有多少重量?我真的很感激你!!我理解!谢谢你的帮助!
Parameter containing:
tensor([-0.0614, -0.0778,  0.0968, -0.0420,  0.1779, -0.0843],
       requires_grad=True)
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