实现一个简单的的神经网络(一)—超参数的定义
1. 导入需要用到的库
基于pytorch架构
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
#如果没有的话使用以下命令安装
pip install torch
pip install torchvision
pip install matplotlib
2. 设置超参数
#定义超参数
input_size = 28 #图像总尺寸28*28
num_classes = 10 #标签的种类 在这里我们使用的数据集是手写数字数据集MNIST
num_epochs = 30 #训练的总循环周期
batch_size = 64 #一个批次的大小,64张图片
2.1. 设置图像的输入尺寸
CNN网络原侧上是不受图片输入尺寸的影响,但是由于我们采用了全连接输出,因为全连接的参数量得固定,倘若样本图片大小不同,那么卷积层最后得到的feature map大小也不同,flatten之后会导致维度不一致,那么全连接的参数量就也会随样本维度变化而不能相互兼容,所以我们需要设置一个固定的输入尺寸。如果采取其他的输出方式替代全连接层,那么就不需要设置固定的尺寸。
2.2. 设置图像的poch
一个epoch指代所有的数据送入网络中完成一次前向计算及反向传播的过程。
通常一次或者较少的epoch是不能让网络充分学习的,但是设置大量的epoch不仅会导致训练时间过长,还会造成网络的过拟合,也是没有必要的。
epoch的大小不仅和所使用的网络有关,也和数据集的大小与复杂度相关。
epoch没有一个精确的值,通常网络的损失函数达到平稳波动的时候就是epoch的最佳范围,即可暂停训练。
2.3. 设置图像的batchsize
由于数据集通常较大,整体训练对电脑性能要求较高,通常一次只送入一小批数据进行训练,每次送入训练的一批数据就是一个batch,而这个batch大小即为batchsize。
batchsize设置过小容易造成网络收敛较慢的情况。
batchsize设置过大对显存要求过高。
通常根据自己的电脑设置(4,8,16,32,64)的大小,如果有GPU的话可以设置大点,没有的话可以,小一点,设置为1则无意义。