构建卷积神经网络
卷积神经网络中的输入层与传统的神经网络有些区别,需要重新设计,训练模块基本一致
1.读取数据
1.dataset --> DataLoader构建batch数据
- 既然是构建batch数据,故需要batch_size参数
2.搭建模型
- 1.是个类
- 2.定义__init__()函数
- 1.继承父类
- 2.定义用到的层 self.XXX = XXX 格式
- 3.forward(self,x)函数中调用__init__()函数中定义好的层
- 这个x指的是输入的数据
3.用数据和定义好的模型进行训练
- 0.训练需要实例化定义好的模型
- 1.获取到加载好的数据
- 2.定义好的模型中传入数据,获得结果
- 3.用得到的结果和真实值比较,可以得到损失值和准确率
- 4.反向传播,优化器进行梯度更新
import torch
import torch. nn as nn
import torch. optim as optim
import torch. nn. functional as F
from torchvision import datasets, transforms
import matplotlib. pyplot as plt
import numpy as np
% matplotlib inline
1.读取数据
分别构建训练集和测试集(验证集)
使用DataLoader来迭代获取数据
input_size = 28
num_classes = 10
num_epochs = 3
batch_size = 64
train_dataset = datasets. MNIST(
root= './data' ,
train= True ,
transform= transforms. ToTensor( ) ,
download= True
)
test_dataset = datasets. MNIST( root= './data' ,
train= False ,
transform= transforms. ToTensor( ) )
train_loader = torch. utils. data. DataLoader( dataset= train_dataset,
batch_size= batch_size,
shuffle= True )
test_loader = torch. utils. data. DataLoader( dataset= test_dataset,
batch_size= batch_size,
)
2.搭建卷积神经网络模型
class CNN ( nn. Module) :
def __init__ ( self) :
super ( CNN, self) . __init__( )
self. conv1 = nn. Sequential(
nn. Conv2d(
in_channels= 1 ,
out_channels= 16 ,
kernel_size= 5 ,
stride= 1 ,
padding= 2 ) ,
nn. ReLU