PyTorch基础(三)-----神经网络包nn和优化器optim

  • kernel_size(int or tuple):池化窗口size

  • stride(int or tuple):池化的步长

  • padding(int or tuple):池化的填充,默认为0

  • 案例

pool of square window of size=3, stride=2

m = nn.MaxPool2d(3,stride = 2)

pool of non-square window

m = nn.MaxPool2d((3, 2), stride=(2, 1))

input = torch.randn(20, 16, 50, 32)

output = m(input)

  • nn.AvgPool2d(kernel_size,stride):这里列举了常用的几个参数,其余省略了

  • kernel_size(int or tuple):池化窗口size

  • stride(int or tuple):池化的步长

  • padding(int or tuple):池化的填充,默认为0

  • 案例

pool of square window of size=3, stride=2

m = nn.AvgPool2d(3, stride=2)

pool of non-square window

m = nn.AvgPool2d((3, 2), stride=(2, 1))

input = torch.randn(20, 16, 50, 32)

output = m(input)

  • nn.Linear(in_features, out_features, bias)

  • in_features:输入特征数

  • out_features:输出特征数

  • bias:偏置

  • 案例

m = nn.Linear(20, 30)

input = torch.randn(128, 20)

output = m(input)

print(output.size())

torch.Size([128, 30])

二、案例+相关代码注释

在这之前,首先我们需要了解一下PyTorch中已经给我们准备好的网络模型nn.Module。我们自己定义的网络模型只需要继承nn.Module,并实现它的forward()方法,PyTorch会根据Autograd,自动实现backward()函数,在forward函数中我们可以使用任何Tensor支持的函数,还可以使用if、for、print等Python语法,写法与标准Python写法是一致的。

class Net(nn.Module):

def init(self):

nn.Module子类的函数必须在构造函数中执行父类的构造函数

super(Net, self).init()

卷积层 '1’表示输入图片为单通道, '6’表示输出通道数,'3’表示卷积核为3*3

self.conv1 = nn.Conv2d(1, 6, 3)

#线性层,输入1350个特征,输出10个特征

self.fc1 = nn.Linear(1350, 10) #这里的1350是如何计算的呢?这就要看后面的forward函数

#正向传播

def forward(self, x):

print(x.size()) # 结果:[1, 1, 32, 32]

卷积 -> 激活 -> 池化

x = self.conv1(x) #根据卷积的尺寸计算公式,计算结果是30,具体计算公式后面第二章第四节 卷积神经网络 有详细介绍。

x = F.relu(x)

print(x.size()) # 结果:[1, 6, 30, 30]

x = F.max_pool2d(x, (2, 2)) #我们使用池化层,计算结果是15

x = F.relu(x)

print(x.size()) # 结果:[1, 6, 15, 15]

reshape,‘-1’表示自适应

#这里做的就是压扁的操作 就是把后面的[1, 6, 15, 15]压扁,变为 [1, 1350]

x = x.view(x.size()[0], -1)

print(x.size()) # 这里就是fc1层的的输入1350

x = self.fc1(x)

return x

net = Net()

print(net)

  • 运行结果

Net(

(conv1): Conv2d(1, 6, kernel_size=(3, 3), stride=(1, 1))

(fc1): Linear(in_features=1350, out_features=10, bias=True)

)

  • 网络的可学习参数通过net.parameters()返回

for parameters in net.parameters():

print(parameters)

  • 运行结果

Parameter containing:

tensor([[[[ 0.2745, 0.2594, 0.0171],

[ 0.0429, 0.3013, -0.0208],

[ 0.1459, -0.3223, 0.1797]]],

[[[ 0.1847, 0.0227, -0.1919],

[-0.0210, -0.1336, -0.2176],

[-0.2164, -0.1244, -0.2428]]],

[[[ 0.1042, -0.0055, -0.2171],

[ 0.3306, -0.2808, 0.2058],

[ 0.2492, 0.2971, 0.2277]]],

[[[ 0.2134, -0.0644, -0.3044],

[ 0.0040, 0.0828, -0.2093],

[ 0.0204, 0.1065, 0.1168]]],

[[[ 0.1651, -0.2244, 0.3072],

[-0.2301, 0.2443, -0.2340],

[ 0.0685, 0.1026, 0.1754]]],

[[[ 0.1691, -0.0790, 0.2617],

[ 0.1956, 0.1477, 0.0877],

[ 0.0538, -0.3091, 0.2030]]]], requires_grad=True)

Parameter containing:

tensor([ 0.2355, 0.2949, -0.1283, -0.0848, 0.2027, -0.3331],

requires_grad=True)

Parameter containing:

tensor([[ 2.0555e-02, -2.1445e-02, -1.7981e-02, …, -2.3864e-02,

8.5149e-03, -6.2071e-04],

[-1.1755e-02, 1.0010e-02, 2.1978e-02, …, 1.8433e-02,

7.1362e-03, -4.0951e-03],

[ 1.6187e-02, 2.1623e-02, 1.1840e-02, …, 5.7059e-03,

-2.7165e-02, 1.3463e-03],

…,

[-3.2552e-03, 1.7277e-02, -1.4907e-02, …, 7.4232e-03,

-2.7188e-02, -4.6431e-03],

[-1.9786e-02, -3.7382e-03, 1.2259e-02, …, 3.2471e-03,

-1.2375e-02, -1.6372e-02],

[-8.2350e-03, 4.1301e-03, -1.9192e-03, …, -2.3119e-05,

2.0167e-03, 1.9528e-02]], requires_grad=True)

Parameter containing:

tensor([ 0.0162, -0.0146, -0.0218, 0.0212, -0.0119, -0.0142, -0.0079, 0.0171,

0.0205, 0.0164], requires_grad=True)

  • net.named_parameters可同时返回可学习的参数及名称。

for name,parameters in net.named_parameters():

print(name,‘:’,parameters.size())

  • 我们来简单测试一下:注意forward函数的输入和输出都是Tensor

input = torch.randn(1, 1, 32, 32) # 这里的对应前面fforward的输入是32

out = net(input)

out.size()
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

如果你选择了IT行业并坚定的走下去,这个方向肯定是没有一丝问题的,这是个高薪行业,但是高薪是凭自己的努力学习获取来的,这次我把P8大佬用过的一些学习笔记(pdf)都整理在本文中了

《Java中高级核心知识全面解析》

小米商场项目实战,别再担心面试没有实战项目:

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
alt=“img” style=“zoom: 33%;” />

总结

如果你选择了IT行业并坚定的走下去,这个方向肯定是没有一丝问题的,这是个高薪行业,但是高薪是凭自己的努力学习获取来的,这次我把P8大佬用过的一些学习笔记(pdf)都整理在本文中了

《Java中高级核心知识全面解析》

[外链图片转存中…(img-KJ8NG7ol-1712184094486)]

小米商场项目实战,别再担心面试没有实战项目:

[外链图片转存中…(img-mE5ErUjx-1712184094486)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值