深度智心
PyTorch发布已经有段时间了,最近越来越火,但周围用的人不是很多,很多人已经用习惯了Caffe或者TensorFlow。其实PyTorch还是很有吸引力和竞争力的,相信会有越来越多的人转移到PyTorch阵营来。
PyTorch的优点比较明显,首先安装起来很方便,根据系统环境选择pip安装或者conda安装(如果你系统安装了Anaconda环境),如果使用GPU需要先安装CUDA,根据版本选择即可,免去了类似安装Caffe依赖库、编译caffe的很多麻烦,如下图:
第二个很大的优点便是简洁易用,今天和大家一起来探讨一下如何用PyTorch来实现一个简单的卷积神级网络。
首先是准备数据,PyTorch准备数据有很多灵活的方式,在最后能够将数据转为Numpy数组即可,通过Numpy数据可以转化为PyTorch所需的Tensor。因此,对于图像数据,可以直接通过opencv,Pillow等做处理;语音数据可以通过scipy和librosa来处理成numpy;文本数据可以通过CNTK之类的自然语言处理库处理成numpy数组。
今天会提供一个处理自己数据的样例,但最后网络所用的训练数据采用MNIST。
以下是一个简单的将图像数据转换为Numpy数组数据的样例,在模型中调用加载处理好的数据,并转为Tensor就可以实现自己数据的训练:
对于MNIST,PyTorch官方封装了加载数据的模块:torchvision.datasets.MNIST,大家可以去官网查看,这里同样会提供一个自己处理MNIST数据的样例,如下:
有了数据,接下来我们可以开始构建模型了,这里构建一个2层卷积,用过torch的人应该很熟悉,模型很简单也很明了:
模型构建完毕,就可以供训练和测试使用了,以下为训练和测试调用模型例子:
这里默认为CPU模型,如果需要使用GUP,需要将数据流和模型都加载到显存,调用*.cuda( )即可。
接下来就是迭代训练和测试:
之后调用main函数就可以愉快的训练了。