Pytorch中 list(net.parameters())[0]

Pytorch中 list(net.parameters())[0]

先看一下Lenet的代码

class LeNet(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv = nn.Sequential(
            nn.Conv2d(1, 6, 5),  # in_channels, out_channels, kernel_size
            nn.Sigmoid(),

            nn.MaxPool2d(2, 2),  # kernel_size, stride
            nn.Conv2d(6, 16, 5),
            nn.Sigmoid(),
            nn.MaxPool2d(2, 2)
        )
        self.fc = nn.Sequential(
            nn.Linear(16*4*4, 120),
            nn.Sigmoid(),
            nn.Linear(120, 84),
            nn.Sigmoid(),
            nn.Linear(84, 10)
        )

    def forward(self, img):
        feature = self.conv(img)
        output = self.fc(feature.view(img.shape[0], -1))  # img.shape[0]是batch_size
        print(img.size())
        return output


net = LeNet()

加上FC层共有5个参数层(每层有权值和bias),运行下面的代码

print(list(net.parameters()))
[Parameter containing:
tensor([[[[ 0.0991,  0.1349, -0.0070, -0.1155, -0.0294],
          [-0.0658,  0.0957,  0.1981,  0.1192, -0.0146],
          [-0.1672,  0.1914,  0.1532, -0.1125,  0.0129],
          [ 0.1950, -0.0386,  0.1198, -0.0127, -0.0673],
          [ 0.1181,  0.1342,  0.1384, -0.0352,  0.1887]]],


        [[[ 0.0795, -0.1427,  0.1126, -0.0740,  0.1322],
          [ 0.0405, -0.0449,  0.1535, -0.1308, -0.0610],
          [-0.1037, -0.1754, -0.1544,  0.1937,  0.0915],
          [ 0.1464, -0.1385, -0.0502,  0.0471, -0.0091],
          [ 0.0878, -0.1831,  0.0909, -0.1313, -0.1462]]],


        [[[-0.0178,  0.0972, -0.1304,  0.0813, -0.0893],
          [ 0.1059,  0.0222, -0.0230, -0.1466, -0.0590],
          [-0.0327, -0.0503, -0.1373,  0.1634, -0.0452],
          [ 0.1720,  0.1130, -0.1299, -0.0550,  0.1723],
          [ 0.0730,  0.1294, -0.0941,  0.0520, -0.0408]]],


        [[[-0.1357, -0.1327, -0.0143,  0.1415,  0.0842],
          [ 0.0013,  0.0838, -0.1388,  0.0106,  0.0555],
          [-0.0590, -0.1105, -0.0641, -0.1874, -0.0973],
          [ 0.1863,  0.0678,  0.1571,  0.1057,  0.0562],
          [ 0.1442, -0.1517, -0.0078, -0.1562, -0.0867]]],


        [[[ 0.0950, -0.0273, -0.1122,  0.0195,  0.1027],
          [-0.1541,  0.0725, -0.1750, -0.1083, -0.0328],
          [-0.1178,  0.0273, -0.0396, -0.1906, -0.0434],
          [-0.1573,  0.1007, -0.0713, -0.0218, -0.1169],
          [-0.1945,  0.1164, -0.1634,  0.1479,  0.1212]]],


        [[[ 0.1842,  0.0659, -0.0614,  0.1092, -0.1675],
          [-0.1057,  0.0857, -0.0968,  0.1906,  0.1513],
          [-0.1912,  0.1350, -0.0484, -0.0251,  0.1643],
          [ 0.1141,  0.0235, -0.1294, -0.0091, -0.0069],
          [ 0.0336, -0.0086, -0.0673,  0.1272, -0.0220]]]], requires_grad=True), Parameter containing:
tensor([-0.0706, -0.0415, -0.1431, -0.1451, -0.1992, -0.1000],
       requires_grad=True),
Parameter containing:..........

这是第一个卷积层的参数,包含权值和10个bias
运行下面代码

print(len(list(net.parameters())))
print(type(list(net.parameters())[0]))
10
<class 'torch.nn.parameter.Parameter'>

这是意味着这个list共有10个元素,每个元素是Parameter,因为这里有5层,每层包含权值与bias,所以list有10个Parameter元素。

注意:

BN层也有两个参数(gamma, beta)。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch,`nn.Module`是所有神经网络模块的基类。它是一个封装了参数、计算方法以及其他网络组件的类,可以用来构建自己的神经网络模型。 每个`nn.Module`子类的构造函数都应该调用基类的构造函数。在`__init__`方法,我们可以定义网络的各个层、参数和其他组件。我们也可以在`forward`方法定义网络的前向传播过程,即输入数据经过一系列计算后得到输出结果。 `nn.Module`提供了很多实用的方法,例如`parameters`方法可以返回模型所有可训练的参数,`to`方法可以将模型转移到指定的设备上等。 示例代码: ```python import torch import torch.nn as nn class MyModel(nn.Module): def __init__(self): super(MyModel, self).__init__() self.conv1 = nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1) self.relu = nn.ReLU(inplace=True) self.pool = nn.MaxPool2d(kernel_size=2, stride=2) self.fc = nn.Linear(16 * 14 * 14, 10) def forward(self, x): x = self.conv1(x) x = self.relu(x) x = self.pool(x) x = x.view(x.size(0), -1) x = self.fc(x) return x model = MyModel() input = torch.randn(1, 3, 28, 28) output = model(input) ``` 这里我们定义了一个简单的卷积神经网络模型,包括了一个卷积层、一个ReLU激活函数、一个最大池化层和一个全连接层。在`forward`方法,我们定义了输入数据的前向传播过程。我们可以通过调用`parameters`方法打印出模型的所有参数:`print(list(model.parameters()))`。我们还可以使用`to`方法将模型转移到GPU上:`model.to(device)`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值