代码练习--卷积神经网络初步

本文使用PyTorch详细介绍了卷积神经网络(CNN)的训练与测试过程,包括数据预处理、模型构建、GPU训练、模型参数计算等步骤。通过对比全连接网络,展示了CNN在图像识别任务中的优势。同时,通过随机打乱像素顺序,探讨了卷积和池化在图像处理中的关键作用。
摘要由CSDN通过智能技术生成

PyTorch 进行CNN的训练与测试

还有展示池化与卷积操作的作用
深度卷积神经网络中,有如下特性

很多层: compositionality
卷积: locality + stationarity of images
池化: Invariance of object class to translations
In [0]:
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torchvision import datasets, transforms
import matplotlib.pyplot as plt
import numpy

一个函数,用来计算模型中有多少参数

def get_n_params(model):
np=0
for p in list(model.parameters()):
np += p.nelement()
return np

使用GPU训练,可以在菜单 “代码执行工具” -> “更改运行时类型” 里进行设置

device = torch.device(“cuda:0” if torch.cuda.is_available() else “cpu”)

  1. 加载数据 (MNIST)
    PyTorch里包含了 MNIST, CIFAR10 等常用数据集,调用 torchvision.datasets 即可把这些数据由远程下载到本地,下面给出MNIST的使用方法:

torchvision.datasets.MNIST(root, train=True, transform=None, target_transform=None, download=False)

root 为数据集下载到本地后的根目录,包括 training.pt 和 test.pt 文件
train,如果设置为True,从training.pt创建数据集,否则从test.pt创建。
download,如果设置为True, 从互联网下载数据并放到root文件夹下
transform, 一种函数或变换,输入PIL图片,返回变换之后的数据。
target_transform 一种函数或变换,输入目标,进行变换。
另外值得注意的是,DataLoader是一个比较重要的类,提供的常用操作有:batch_size(每个batch的大小), shuffle(是否进行随机打乱顺序的操作), num_workers(加载数据的时候使用几个子进程)

In [3]:
input_size = 28*28 # MNIST上的图像尺寸是 28x28
output_size = 10 # 类别为 0 到 9 的数字,因此为十类

train_loader = torch.utils.data.DataLoader(
datasets.MNIST(’./data’, train=True, download=True,
transform=transforms.Compose(
[transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,))])),
batch_size=64, shuffle=True)

test_loader = torch.utils.data.DataLoader(
datasets.MNIST(’./data’, train=False, transform=transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,))])),
batch_size=1000, shuffle=True)
Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz to ./data/MNIST/raw/train-images-idx3-ubyte.gz
HBox(children=(IntProgress(value=1, bar_style=‘info’, max=1), HTML(value=’’)))
Extracting ./data/MNIST/raw/train-images-idx3-ubyte.gz to ./data/MNIST/raw
Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz to ./data/MNIST/raw/train-labels-idx1-ubyte.gz
HBox(children=(IntProgress(value=1, bar_style=‘info’, max=1), HTML(value=’’)))
Extracting ./data/MNIST/raw/train-labels-idx1-ubyte.gz to ./data/MNIST/raw
Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz to ./data/MNIST/raw/t10k-images-idx3-ubyte.gz
HBox(children=(IntProgress(value=1, bar_style=‘info

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值