1. CNN简介
CNN,卷积神经网络,是深度学习中的一个分支,在计算机视觉领域,特别是图像分类、图像检索、物体检测和语义分割的主流模型。CNN每一层由众多卷积核组成,每个卷积核对输入的像素进行卷积操作,得到下一次输入。
CNN是一种层次模型,由卷积、池化、非线性激活函数和全连接层组成。
上图为LeNet结构图,是经典的字符识别模型。通过多次卷积和池化,最后将输入的像素映射为具体的输出。假若是分类任务,则会输出不同类别的概率,然后计算真实标签与CNN模型的预测结果的差异,并通过反向传播更新每层的参数,并在更新完成后再次向前传播,如此反复,直至训练完成。
2. 使用pytorch构建CNN模型
在pytorch中构建CNN模型十分简单,只需要定义模型参数和正向传播即可,pytorch会自动根据正向传播计算并完成反向传播。下面构建的这个模型具有两个卷积层和六个全连接层。
导入工具库
import torch
torch.manual_seed(0)
torch.backends.cudnn.deterministic = False
torch.backends.cudnn.benchmark = True
import torchvision.models as models
import torchvision.transforms as transforms
import torchvision.datasets as datasets
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch.autograd import Variable
from torch.utils.data.dataset import Dataset
定义模型
class SVHN_Model1(nn.Module):
def __init__(self):
super(SVHN_Model1, self).__init__()
# CNN提取特征模块
self.cnn = nn.Sequential(
nn.Conv2d(3, 16, kernel_size=(3, 3), stride=(2, 2)),
nn.ReLU(),
nn.MaxPool2d(2