pytorch第五弹

pytorch第五弹

标签: pytorch 深度学习


前面第四节讲了关于如何定义pytorch的输入的问题,学会了简单的数据输入,下面就可以直接进行卷积神经网络了,也就是深度学习里面重要的一环,网络结构的搭建–构建前向传播的过程。

卷积操作

深度学习中最为基础的就是卷积操作,虽然在学习卷积的时候觉得非常难,但是在pytorch里面却定义的非常简单:

import torch
import torch.nn as nn
import torch.nn.functional as F 
x = torch.rand(1, 3, 224, 224)
conv1 = nn.Conv2d(3, 6, 5)
result = conv1(x)

很多前向传播的操作都定义在torch.nn或者torch.nn.functional中,所以可以去这两个模块里面找到你想要的操作。上面就定义了一个简单的卷积操作,其中卷积核的大小为5,输出的特征的通道数为6,输入的特征通道数为3, Conv2d里面的参数意义,可以参考下面的这个声明一一对应,和之前学习的理论知识中的都能都对应起来。

def __init__(self, in_channels, out_channels, kernel_size, stride=1,
             padding=0, dilation=1, groups=1, bias=True):

激活函数

激活函数能够增加网络的非线性,并且也能把数据规范到指定的范围。在torch中激活函数可以在torch.nn.functional里面找到

import torch.nn.functional as F 
x = F.relu(x)

上面的代码就实现了简单的一个relu激活函数,类似的还有tanh等都可以在functional里面找到。

池化和dropout

这次就直接给出例子:

import torch.nn.functional as F 
import torch.nn as nn
x = F.max_pool2d(x, (2, 2))  
x = F.dropout(x, 0.5, training=True)

可以看出都是可以直接调用函数使用的,不过注意在dropout的时候,有一个training的参数,如果你在训练的时候要设置为True,测试则为False,因为测试的时候其实dropout并不起作用了。

小总结

从上面可以发现其实定义以及使用都非常简单,这里提一下nn里面的和F里面的一点不同。

从第一个例子可以看出卷积操作是在nn里面,它的使用方式是先定义一个卷积操作对象,然后调用这个对象,而F里面的比如Relu则都是直接使用,这是因为在卷积的时候,卷积核参数都是需要学习得到的,也就是具有可学习的参数,所以要定义成对象,方便以后更新,而Relu则没有可学习的参数,所以直接一个函数就可以了。

发布了260 篇原创文章 · 获赞 254 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/qq_28888837/article/details/101365071