^_^
一、概览
使用流程,手写数字为例
1.构建网络模型
2.加载数据集
3.实例化网络,损失函数,优化器
4.批量梯度下降训练
二、Dataset、Model、Loss、Optimizer
1.加载自己的数据集
1)继承torch.utils.data.Dataset类,并重写__ len() __ 和__ getitem __()函数,在__getitem()__中对数据进行预处理。
2) 用torch.utils.data.DataLoader()函数对数据集进行封装。
2.网络模型Model
继承torch.nn.Module类, __ init__()中初始化网络各层,forward()中按网络结构实现计算图。
常用层:
1)卷积层:输出尺寸:floor((W-K+2P)/S+1)
torch.nn.Conv2d(in_channels,out_channels,kernel_size,stride,padding,dilation,groups,bias)
2)池化层:
torch.nn.MaxPool2d(kernel_size,stride,padding,dilation,return_indices,ceil_mode)
torch.nn.AvgPool2d()
3)全连接层:
torch.nn.Linear(in_channels,out_channels)
4)激活函数层:
torch.nn.Sigmoid(inpalce)
torch.nn.ReLU(inplace)
torch.nn.Softmax(dim)
5)Dropout层:torch.nn.Dropout(p,inplace) 每个神经元以概率p保留,增强泛化性能
BN层:torch.nn.BatchNorm2d(num_features) 改变内部节点数据分布,避免参数陷入饱和区
6)反卷积:torch.nn.ConvTranspose2d(in_channels,out_channels,kernel_size,stride,padding,output_padding,bias)
3.损失函数Loss:
1)内置
MSE均方差损失:torch.nn.MSELoss()
MAE平均绝对损失:torch.nn.L1Loss()
交叉熵损失:torch.nn.CrossEntropyLoss()
2)自定义损失函数
继承torch.nn.Module类,自定义计算过程,同网络定义类似。
4.优化器
SGD(小批量梯度下降算法):torch.nn.optim.SGD(paras,lr)
Adam(学习率自适应):torch.nn.optim.Adam()
…
三、常用语句块
1.设备选择
use_gpu=True
gpu_name=0
if torch.cuda.is_available() and use_gpu:
DEVICE = torch.device("cuda:"+str(gpu_name))
# 每次训练计算图改动较小使用,在开始前选取较优的基础算法(比如选择一种当前高效的卷积算法)
torch.backends.cudnn.benchmark = True
else:
DEVICE=torch.device("cpu")
2.固定随机
random.seed(1)
np.random.seed(1)
torch.manual_seed(1)
if use_cuda:
torch.cuda.manual_seed(1)