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

import torch.nn as nn

torch.version

除了nn别名以外,我们还引用了nn.functional,这个包中包含了神经网络中使用的一些常用函数,这些函数的特点是,不具有可学习的参数(如ReLU,pool,DropOut等),这些函数可以放在构造函数中,也可以不放,但是这里建议不放。

一般情况下我们会将nn.functional 设置为大写的F,这样缩写方便调用

import torch.nn.functional as F

一、常用操作

| 操作名 | 介绍 |

| — | — |

| nn.Conv2d | 在输入图像上应用2维卷积 |

| nn.MaxPool2d | 在输入图像上应用2维最大池化 |

| nn.AvgPool2d | 在输入图像上应用2维平均池化 |

| nn.ReLU | 应用非线性修正单元ReLU |

| nn.Linear | 对输入数据应用线性变换,也就是我们常说的全连接层 |

| nn.CrossEntropyLoss | 交叉熵损失函数 |

| nn.Upsample | 上采样,图像分割用的很多 |

| nn.Dropout | 应用Dropout层 |

| nn.MSELoss | 均方误差损失函数 |

| nn.BatchNorm1d | 应用BN层 |

因为方法太多,这里只是列举了一小部分,详细请自行去PyTorch官网查看。所列举的常用方法也只是以常用使用方式来进行举例(由于有些方法的参数实在是太多了,而且以我自己的能力也不一定能以书面文字的方式解释清楚)。

  • nn.Conv2d(in_channels,out_channels,kernel_size):可选参数这里省略了

  • in_channels(int):输入图像的通道数

  • out_channels(int):卷积生成的通道数

  • kernel_size(int or tuple):卷积核的size,如果是方形,用int;如果非方形,用tuple。

  • 案例

With square kernels and equal stride

m = nn.Conv2d(16,33,3,stride = 2)

With square kernels and unequal stride and with padding

m = nn.Conv2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2))

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

output = m(input)

  • nn.MaxPool2d(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.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]]],

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

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

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

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

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

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

由于篇幅限制,小编在此截出几张知识讲解的图解

P8级大佬整理在Github上45K+star手册,吃透消化,面试跳槽不心慌

P8级大佬整理在Github上45K+star手册,吃透消化,面试跳槽不心慌

P8级大佬整理在Github上45K+star手册,吃透消化,面试跳槽不心慌

P8级大佬整理在Github上45K+star手册,吃透消化,面试跳槽不心慌

P8级大佬整理在Github上45K+star手册,吃透消化,面试跳槽不心慌

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

出几张知识讲解的图解**

[外链图片转存中…(img-8X0nHoib-1712804565557)]

[外链图片转存中…(img-ZVRt3w6E-1712804565558)]

[外链图片转存中…(img-y6dLJvVz-1712804565558)]

[外链图片转存中…(img-Hdzbh6WP-1712804565558)]

[外链图片转存中…(img-thl88XZn-1712804565558)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-29dHLI8J-1712804565559)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值