Support Statistics
¥.00 ·
0times
Text Preview (First 20 pages)
Registered users can read the full content for free
Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.
Page
1
(This page has no text content)
Page
2
版权信息 书名:PyTorch深度学习实战 作者:侯宜军 本书由北京图灵⽂化发展有限公司发⾏数字版。版权所有,侵权必 究。 您购买的图灵电⼦书仅供您个⼈使⽤,未经授权,不得以任何⽅式复 制和传播本书内容。 我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产 权。 如果购买者有侵权⾏为,我们可能对该⽤户实施包括但不限于关闭该 帐号等维权措施,并可能追究法律责任。 图灵社区会员 ⻢维峰(mimicico@gmail.com) 专享 尊重版权 内容摘要 作者简介 1 Facebook深度学习框架PyTorch 1.1 Pytorch是什么 1.2 Tensor 1.3 安装Python 1.4 安装PyTorch 2 变量
Page
3
3 求导 4 损失函数 4.1 nn.L1Loss 4.2 nn.SmoothL1Loss 4.3 nn.MSELoss 4.4 nn.BCELoss 4.5 nn.CrossEntropyLoss 4.6 nn.NLLLoss 4.7 nn.NLLLoss2d 5 优化器Optim 5.1 SGD 5.2 RMSprop 5.3 Adagrad 5.4 Adadelta 5.5 Adam 5.6 Adamax 6 线性回归 7 numpy矩阵的保存 8 模型的保存和导⼊ 9 卷积层 9.1 Conv2d 9.2 Conv1d 10 池化层 10.1 max_pool2d 10.2 avg_pool2d 10.3 max_pool1d 11 Mnist⼿写数字图像识别 11.1 加载数据 11.2 定义卷积模型
Page
4
11.3 开始训练 11.4 完整代码 11.5 验证结果 11.6 修改参数 12 图像处理 12.1 图像处理scipy.ndimage 12.2 热点图 12.3 ⾼斯滤波 12.4 图⽚翻转 12.5 轮廓检测 12.6 ⾓点 12.7 直⽅图 12.8 视频抽取图⽚ 12.9 形态学图像处理 12.9.1 膨胀和腐蚀 12.9.2 Hit和Miss 13 RNN和LSTM原理 13.1 ⻓期依赖问题 13.2 LSTM ⽹络 13.3 LSTM 的核⼼思想 13.4 逐步理解 LSTM 13.5 LSTM 的变体 14 PyTorch中的LSTM 15 Embedding层 16 LSTM⽂本分类 16.1 数据准备 16.2 数据源 16.3 中⽂分词 16.4 模型
Page
5
16.5 训练 16.6 验证结果 16.7 源码 17 参考 内容摘要 PyTorch是Facebook发布的⼀款⾮常具有个性的深度学习框架,它和 Tensorflow,Keras,Theano等其他深度学习框架都不同,它是动态计算 图模式,其应⽤模型⽀持在运⾏过程中根据运⾏参数动态改变,⽽其 他⼏种框架都是静态计算图模式,其模型在运⾏之前就已经确定。 本书共分成16个章节,第1章是Pytorch简介和环境搭建;第2〜8章是 Keras的软件框架说明,包含了层的说明,优化器和损失函数等;第9〜 10章重点介绍了深度学习中的卷积和池化的概念;第11〜12章是介绍 ⽤神经⽹络模型搭建图像识别系统的实战经验;第13〜16章介绍如何 使⽤LSTM模型来处理⾃然语⾔。本书从原理到实战、深⼊浅出的介绍 了Facebook⼈⼯智能利器Pytorch的卓越表现,只要认真读完本书,你 就能掌握Pytorch的使⽤技巧了。本书具有很强的实战性。 本书的⽬标⼈群主要定位为具有⼀定Python编程基础,对机器学习和神 经⽹络有⼀定了解的程序员们。 作者简介 侯宜军,男,南京邮电⼤学计算机系研究⽣毕业,先后在电信设计 院、摩托罗拉、医疗互联⽹初创公司等⼯作过,居住在南京。
Page
6
具有⼤型电商⽹站实战经验,多年分布式系统源码研究,深度学习框 架研究。对Keras,Pytorch,ZooKeeper,Spark,Kafka等⼤数据技术框 架较熟悉。2015~2016年曾经与他⼈共同创办六度服务号中医在线平 台,2017年初因个⼈原因退出创业团队,⽬前在苏宁云商任职⾼级技 术经理。 1 Facebook深度学习框架PyTorch 1.1 Pytorch是什么 PyTorch 是 Facebook 发布的⼀款⾮常具有个性的深度学习框架,它和 Tensorflow,Keras,Theano 等其他深度学习框架都不同,它是动态计 算图模式,其应⽤模型⽀持在运⾏过程中根据运⾏参数动态改变,⽽ 其他⼏种框架都是静态计算图模式,其模型在运⾏之前就已经确定。 Python 模块可以通过 pip 安装,国内可以换⼀个⾖瓣 pip 源,⽹速快的 惊⼈! 临时使⽤时可以使⽤下述命令: pip install pythonModuleName -i https://pypi.douban.com/simple 也可以永久更改:/root/.pip/pip.conf:
Page
7
[global] index-url = https://pypi.douban.com/simple 在 pip.conf 中,添加以上内容,就修改了默认的软件源。 到 https://pypi.python.org/pypi/ 下载所需的 python 库,直到安装 Keras。 安装以下软件包,排名不分先后: Scipy,Numpy,Theano,Tensowflow,Pyyaml,Six,pycparser,cffi, Keras 等。 (之所以要安装Keras是因为⽂中某些地⽅使⽤了Keras的数据预处理类 包) 如果是 .whl 则运⾏ pip install xxx.whl 安装;如果是 setup.py 则运⾏ python setup.py install 安装(如果是源码先运⾏ python setup.py build);如果缺少依赖包会有提⽰,到 pypi.python.org 下载对应的依 赖包再重新安装就可以了。 安装过程中需要⽤到 vc++ for python 编译器,到微软官⽹上下载,也 可从 http://aka.ms/vcpython27 进去。 安装scipy的时候报错 no lapack/blas resources found。最后找到⼀个⽅ 法,到 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载 scipy 对应的 whl 安装即可。 1.2 Tensor
Page
8
在 PyTorch 中 Tensor 代表多维数组,类似 TensorFlow 中的 matrix 或 ndarrays。 例如,⽣成⼀个 (5,3) 的 tensor: x = torch.rand(5, 3) print(x) 输出: 0.1290 0.8748 0.1096 0.7204 0.9472 0.2891 0.3106 0.1791 0.0739 0.2701 0.5434 0.9968 0.2098 0.9916 0.1561 获取它的⼤⼩: print(x.size())
Page
9
输出: torch.Size([5, 3]) 1.3 安装Python 安装 Python2.7 版本,笔者⽤的是阿⾥云服务器,现在申请的版本应该 是 2.7 版本以上,笔者当时的版本是 2.6 版本,安装 numpy 等 python 库需要 2.7 版本以上,所以先安装 python2.7。 看当前版本: [root@iZ25ix41uc3Z ~]# python --version Python 2.6.6 安装 2.7 版本步骤: 1. #wget http://python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2 2. tar zxvf Python-2.7.3.tar.bz2 3. cd Python-2.7.4 4. ./configure 5. make all 6. make install
Page
10
7. make clean 8. make distclean cd /usr/local/bin ls {%} 看到 python2.7 已经安装到 /usr/local/bin ⽬录下了。 [root@iZ25ix41uc3Z bin]# /usr/local/bin/python2.7 --version Python 2.7.4 新的 python 版本是 2.7.4 最后⼀步还要将系统默认 python 指向该新的 python2.7.4 [root@iZ25ix41uc3Z bin]# rm /usr/bin/python rm:是否删除普通⽂件 "/usr/bin/python"?y [root@iZ25ix41uc3Z bin]# ln -s /usr/local/bin/python2.7 python2.7 python2.7-config [root@iZ25ix41uc3Z bin]# ln -s /usr/local/bin/python2.7 /usr/bin/python [root@iZ25ix41uc3Z bin]# ls -l /usr/bin/python lrwxrwxrwx 1 root root 24 6⽉ 25 12:56 /usr/bin/python -> /usr/local/bin/python2.7
Page
11
最后看看默认 python 版本: [root@iZ25ix41uc3Z bin]# python --version Python 2.7.4 OK,python2.7 安装成功! 安装之后发现 yum ⽤不了了,找到 /usr/bin/yum。编辑⼀下: vi /usr/bin/yum 然后将第⼀⾏的 #!/usr/bin/python 改成 #!/usr/bin/python2.6 即可。 下⾯我们再安装个 pip,pip 安装 python 第三⽅模块⾮常⽅便。 先下载 setuptools: wget --no-check-certificate http://pypi.python.org/packages/source/s/setuptools/setuptools- 0.6c11.tar.gz
Page
12
解压之后进⼊⽬录setuptools-0.6c11 安装python setup.py install 然后安装 pip,和 setuptools 过程类似: wget --no-check-certificate https://github.com/pypa/pip/archive/1.5.5.tar.gz 解压之后进⼊⽬录pip-1.5.5 安装python setup.py install 看看 pip 安装是否成功,执⾏: pip list 如果提⽰ HTTPERROR: {%} 则先安装 openssl:
Page
13
yum install openssl openssl-devel -y 然后再重新安装 python,别的不⽤重新安装了。 [root@iZ25ix41uc3Z Python-2.7.4]# pip list pip (1.5.4) setuptools (27.3.0) wsgiref (0.1.2) 最后我们就可以安装 numpy,scipy 等科学计算库了。 pip install numpy pip install scipy 最后验证⼀下 numpy: [root@iZ25ix41uc3Z ~]# python Python 2.7.4 (default, Jun 25 2017, 13:13:33) [GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2 Type "help", "copyright", "credits" or "license" for more
Page
14
information. >>> import numpy as np >>> np.array([1,2,3]) array([1, 2, 3]) >>> 成功安装 numpy。 1.4 安装PyTorch 我们先试试看 pip 安装能不能成功? 输⼊命令 pip install pytorch,显⽰结果如下: 哦,原来不⽀持 pip 安装,并且提⽰到 pytorch.org 下载安装,同时, 浏览器⾃动打开⽹址:http://pytorch.org/#pip-install-pytorch ,看看⾥⾯ 的安装说明是怎样的。
Page
15
选择我们的环境对应的 whl 安装版本,我们⽤的是 Linux,Python2.7 环境。安装命令如下: pip install http://download.pytorch.org/whl/cu75/torch- 0.1.12.post2-cp27-none-linux_x86_64.whl 等待安装完成。 安装完成后,我们输⼊命令 python,进⼊ python 交互环境,写⼀段⼩ ⼩的 pytorch 程序验证⼀下是不是安装成功了,这段⼩代码调⽤ torch 的 ones ⽅法,看看能不能正常显⽰结果。 代码: >>> import torch >>> a=torch.ones(2,2) >>> a 1 1
Page
16
1 1 [torch.FloatTensor of size 2x2] >>> OK,安装成功了,下⾯我们来⼀步步学习 pytorch 吧。 2 变量 先看看 Tensor,pytorch 中的数据都是封装成 Tensor 来引⽤的,Tensor 实际上就类似于 numpy 中的数组,两者可以⾃由转换。 ⽣成⼀个 (3,4) 维度的数组 import torch x = torch.Tensor(3,4) print("x Tensor: ",x) {%} 可以看到 torch.Tensor() ⽅法⽣成制定维度的随机数。 下⾯看看 Variable 的基本操作,引⽤ Variable:
Page
17
import torch from torch.autograd import Variable x=Variable(torch.Tensor(2,2)) print("x variable: ",x) {%} 我们看到 Variable ⽐ Tensor 多出来第⼀⾏提⽰符”Variable containing:”,说明 Variable 不光包含了数据,还包含了其他东⻄,那么 还包含什么东⻄呢? 默认 Variable 是有导数 grad 的,x.data 是数据,这⾥ x.data 就是 Tensor。x.grad 是计算过程中动态变化的导数。 print ("x.data: ",x.data, ",x.grad: ",x.grad) 此时 Variable 还未进⾏计算,因此 x.grad 为 None。 ⽰例代码 chart1.py 中的 example1 ⽅法。完整代码的执⾏结果截图如 下: {%}
Page
18
3 求导 理解 pytorch,⾸先要理解求导的概念。 数学上求导简单来说就是求取⽅程式相对于输⼊参数的变化率,也就 是加速度。这部分理论基础参考⾼等数学的内容,上过⼤学的都学 过,可能现在都忘了吧:) 求导的作⽤是⽤导数对神经⽹络的权重参数进⾏调整,注意这⾥提到 了权重参数的概念,这是神经⽹络的范畴定义了,关于神经⽹络的基 础知识本书不做介绍,读者最好先了解有关神经⽹络的基本概念再读 此书。 Pytorch 中为求导提供了专门的包,包名叫 autograd。如果⽤ autograd.Variable 来定义参数,则 Variable ⾃动定义了两个变量,data 代表原始权重数据;⽽ grad 代表求导后的数据,也就是梯度。每次迭 代过程就⽤这个 grad 对权重数据进⾏修正。 实践: import torch from torch.autograd import Variable x = Variable(torch.ones(2, 2), requires_grad=True) print(x)
Page
19
输出: 1 1 1 1 [torch.FloatTensor of size 2x2] y=x+2 print(y) 输出: 3 3 3 3 [torch.FloatTensor of size 2x2]
Page
20
z = y * y * 3 out = z.mean() print(z, out) 输出: (Variable containing: 27 27 27 27 [torch.FloatTensor of size 2x2] , Variable containing: 27 [torch.FloatTensor of size 1] ) [torch.FloatTensor of size 1] out.backward()
Comments 0
Loading comments...
Reply to Comment
Edit Comment