赞
踩
深度学习当前的热度虽然没有前两年那么火热,尤其是在学界领域,但是在一些特殊问题中仍有一定的利用价值。一般而言,pytorch在学界使用的较多,tensorflow在业界使用的较多。
pytorch的使用基于tensor(张量)来进行最基本的运算。对于一般的神经网络而言,四维张量是最常见的
import torch
torch.Tensor(5,2,50,50)
上边的代码表示生成了一个4维tensor,四个维度分别表示(batch_size, channel_num, width, height)。batch_size表示一组中有多少条数据,channel_num表示一条数据的通道数,如彩色照片的通道数为3,而黑白照片的通道数为1;width, height则表示一个二维数据的两个维度。
Pytorch中
CNN的结构通常由卷积层、池化层、全连接层构成。卷积、池化的数目多少可以自行设计,下面是torch中封装好可以在CNN中直接使用的子类。
from torch import nn
nn.Conv2d(in_channels=1, out_channels=10, kernel_size=3, stride=1)
nn.MaxPool2d(kernel_size=2, stride=1)
nn.Linear(3240, 200)
nn.Flatten()
需要注意的是,在卷积、池化层组与全连接层之间会有一步“展平”操作,其含义即为将高维数据转换为一维数据。例如,shape为(4,3,28,28)的数据在 nn.Flatten() 操作后会变成 (4,3 * 28 * 28)的数据。
代码如下(示例):
class Cnn(nn.Module): def __init__(self, out_node): super(Cnn, self).__init__() self.conv = nn.Sequential( nn.Conv2d(in_channels=1, out_channels=10, kernel_size=3, stride=1), #卷积层 # nn.ReLU(True), nn.MaxPool2d(kernel_size=2, stride=1),#最大池化层 nn.Conv2d(in_channels=10, out_channels=10, kernel_size=3, stride=1), # nn.ReLU(True), nn.MaxPool2d(kernel_size=2, stride=1), nn.Flatten() # 展平操作,为了与全连接层匹配 ) self.fc = nn.Sequential( nn.Linear(3240, 200), #线性层 nn.ReLU(inplace=True), # relu激活函数 # nn.Dropout(), nn.Linear(200, out_node), nn.ReLU(inplace=True), ) def forward(self, x): # out = self.conv(x) print(out.shape) # out = out.view(out.size(0), 10 * 25 * 25) # print(out.shape) out = self.fc(out) # print(out.shape) return out
本篇简单的对CNN的pytorch实现进行了说明,主要是卷积网络类的实现,要完整实现训练、验证、测试、调参还需要很多步骤,将会在之后陆续分享。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。