实现一个简单的的神经网络(一)—超参数的定义
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
num_classes = 10
num_epochs = 30
batch_size = 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则无意义。
|