1.在pycharm创建合适Python环境,导入所需的库和模块
import torch
import torch.nn as nn
torch.nn包中主要包含了:
1)用来搭建各个层的模块(Modules),比如全连接、二维卷积、池化等;
2)包含了一系列有用的loss函数,这些函数也是在训练神经网络时必不可少的,比如CrossEntropyLoss、MSELoss等;
3)orch.nn.functional子包中包含了常用的激活函数,如relu、leaky_relu、prelu、sigmoid等。
torch.optim包则主要包含了用来更新参数的优化算法,比如SGD、AdaGrad、RMSProp、 Adam.
2.定义卷积神经网络类,继承自 nn.Module
:
class CNN(nn.Module):
def __init__(self):
super(CNN, self).__init__()
# 在此定义网络结构
3.在‘_init_’方法中,定义网络结构,包括卷积层,池化层,全连接层等
//创建卷积层(输入通道,输出通道,卷积核大小)
self.conv1=nn.Conv2d(in_channels,out_chsnnels,kernel_size)
//最大池化层(池化窗口大小,步幅)
self.pool=nn.MaxPool2d(kernel_size,stride)
//全连接层(输入特征数量。输出特征数量)
self.fcl=nn.Linear(in_festures,out_features)
创建卷积层,它会对输入数据进行卷积操作,输出一系列特征图。
创建最大池化层,它将输入特征图的每个窗口中的最大值提取出来,减小了特征图的空间维度,减少计算量。
创建全连接层,也称为密集层,它将输入特征进行线性变换,然后应用激活函数,最终产生输出。
全连接层的每一个结点都与上一层的所有结点相连,用来把前边提取到的特征综合起来
4.实现‘forward’方法,定义正向传播过程
def forward(self,x):
x=self.conv1(x)
x=self.pool(x)
x=x.view(-1.out_feature)
x=self.fc1(x)
return x
5.创建模型实例
model=CNN()
6.定义损失函数和优化器
criterion=nn.CrossEntropyLoss()
optimizer=torch.optim.SGD(model.parameters(),lr=learing_rate)
7.训练和测试
8.补充
1)Epoch:当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一次>epoch。(也就是说,所有训练样本在神经网络中都 进行了一次正向传播 和一次反向传播 )再通俗一点,一个Epoch就是将所有训练样本训练一次的过程。
2)Batch:将整个训练样本分成若干个Batch(批次)
Batch_Size(批大小):每批样本的大小。