Pytorch神经网络简单入门
一、框架说明
Pytorch具体的APi操作详见Pytorch官方Api文档,torchvision具体Api操作详见torchvision官方Api,下面介绍一下常用的包
torch
:张量的常见运算。如创建、索引、连接、转置、加减乘除、切片等torch.nn
: 包含搭建神经网络层的模块(Modules)和一系列loss函数。如全连接、卷积、BN批处理、dropout、CrossEntryLoss、MSELoss等torch.nn.functional
:常用的激活函数relu、leaky_relu、sigmoid等torch.autograd
:提供Tensor所有操作的自动求导方法torch.cuda
:提供对CUDA张量类型的支持,可以让模型使用gpu运行torch.optim
:各种参数优化方法,例如SGD、AdaGrad、Adam、RMSProp等torch.utils.data
:用于加载数据torch.nn.init
:可以用它更改nn.Module的默认参数初始化方式torchvision.datasets
:常用数据集。MNIST、COCO、CIFAR10、Imagenet等torchvision.modules
:常用模型。AlexNet、VGG、ResNet、DenseNet等torchvision.transforms
:图片相关处理。裁剪、尺寸缩放、归一化等torchvision.utils
:将给定的Tensor保存成image文件
二、GPU相关
运行需要成功安装CUDA和CUDNN,同时要保证显卡驱动以及CUDA、CUDNN版本相匹配。对于CUDA的安装网上有很多教程
1 | #True表示可以进行gpu加速 |
在程序中可以如以下操作
1 | #如果机器不存在gpu就使用cpu,存在就使用0号gpu,序号可以按自己需求修改 |
三、前置知识学习
Pytorch的一些入门常用操作,以及Numpy的入门常用操作。Numpy可以看菜鸟教程
深度学习入门可以浏览:
对于网络模型的优化,可以加入Dropout和BN批量归一化
四、搭建第一个神经网络(回归)
第一步生成数据
1 | #导包 |
第二步,建立神经网络,这里定义了一个隐藏层,并使用ReLu激活函数。
1 | # 继承 torch 的 Module |
第三步选择损失函数和优化器
1 | #回归常用MSE,而分类常用Cross Entropy |
第四步模型的训练及其结果
1 | epochs = 100 |
第五步模型的保存和加载
1 | #保存整个模型 |
五、CNN卷积神经网络实现MNIST数据集
手写数字集识别的可视化网站:
首先导入第三方库
1 | import torch |
训练集和测试集的获取,若本机有cuda环境,也可以运行cuda注释代码
1 | EPOCH=1 |
CNN网络配置,输出大小为[(n - k + 2p) / s] + 1
,n代表输入大小,k为核大小,p为填充,s为步幅
1 | class CNN(nn.Module): |
训练与测试
1 | cnn = CNN() |
六、RNN循环神经网络实现MNIST数据集
之前的操作与CNN类似,RNN循环神经网络部分如下
1 | class LSTM(nn.Module): |
七、AutoEncoder自编码
首先获取数据集
1 | import torch |
网络的设置与训练,AutoEncoder是先将图片压缩后还原,用还原后的图片与原图片进行评估并梯度下降
1 | # AutoEncoder 形式很简单, 分别是 encoder 和 decoder , 压缩和解压, 压缩后得到压缩的特征值, 再从压缩的特征值解压成原图片 |
3D展示图,可以进行旋转观看
1 | import matplotlib.pyplot as plt |
八、GAN生成对抗网络
Generator 作为生成器努力生成以假乱真的图片, Discriminator作为判别器,努力判别生成图片为假数据,两者在训练中一起成长,最终训练出可以以假乱真的生成器。这里使用了MNIST作为数据集,生成器是生成数字,判别器验证输入是否为数字,使用了GPU加速训练,这里网络用了简单模型,可以自行修改为卷积网络
1 | import torch |
一下左图是生成的随机噪声,右图是随机噪声经过生成器后的图片
九、DQN强化学习
通过Q-Learning和神经网络结合,通过反馈可以使机器学得的效果越来越好,下面是简单的demo(有点小难,我还没理解)
1 | import torch |