前言

  • 此书使用Python作为编程语言,尽可能地少使用外部库,从零开始实现深度学习的程序。
  • 此书从简单的机器学习问题开始,最终实现一个能高精度地识别图像的系统。
  • 此书以图像识别为主题,主要学习使用深度学习进行图像识别时所需的技术。自然语言处理或者语音识别等不是此书的讨论对象。
  • 此书不介绍Caffe、TensorFlow、Chainer、Theano等深度学习框架的使用方法。
  • 此书不介绍深度学习的详细理论,特别是神经网络的相关详细理论,不介绍用于提高识别精度的参数调优相关内容。
  • 此书不涉及最新研究和理论细节,但读完本书后,读者应有能力进一步去阅读最新的论文或者神经网络相关的理论方面的技术书。

1. Python是什么

  • Python是一个简单、易读、易记的编程语言,而且是开源的,对于首次接触编程的人士来说,Python是最合适的语言。
  • Google、Microsoft、Facebook等战斗在IT行业最前沿的企业经常使用Python。
  • 在科学领域,特别是在机器学习、数据科学领域,Python被大量使用。Python凭借着NumPy、SciPy等优秀的数值计算、统计分析库,在数据科学领域占有不可动摇的地位。深度学习的框架中也有很多使用Python的场景,比如Caffe、TensorFlow、Chainer、Theano等著名的深度学习框架都提供了Python接口。因此,学习Python对使用深度学习框架大有益处。

2. Python的安装

2.1 Python版本

本书使用Python 3.x。

2.2 使用的外部库

本书主要使用NumPy和Matplotlib

  • NumPy是用于数值计算的库,提供了很多高级的数学算法和便利的矩阵操作方法。本书将使用这些便利的方法来有效地促进深度学习的实现。
  • Matplotlib是用来画图的库。使用Matplotlib能将实验结果可视化,并在视觉上确认深度学习运行期间的数据。

2.3 Anaconda发行版

Anaconda请安装3.x的版本。

3. Python解释器

  • 在终端中激活环境后,在终端中输入python --version命令,该命令会输出已经安装的Python的版本信息。

  • 输入python,将会启动Python解释器

  • Python解释器被称为“对话模式”。

  • Python属于“动态类型语言”,所谓动态,是指变量的类型是根据情况自动决定的。

  • 关闭Python解释器时,Linux或Mac OS X 的情况下输入Ctrl+D;Windows的情况下输入Ctrl+Z,然后再按Enter键。

4. Python脚本文件

Python解释器是以对话模式执行程序,便于进行简单的实验,但想进行一连串的处理时,就不太方便。这时,可以将Python程序保存为文件(脚本文件),然后运行这个文件。

4.1 保存为文件

新建一个hungry.txt的文件,在文件内输入这样一段代码print("im hungry"),然后将此文件的名称改为hungry.py。接着打开终端,移动至hungry.py的文件目录,然后输入python hungry.py。这时,终端就会运行这个Python程序了。

4.2 类

  • 如果用户自己定义类的话,就可以自己创建数据类型。此外,也可以定义原创的方法(类的函数)和属性。
  • 类的格式如下
class 类名: def __init__(self, 参数, ...): #构造函数...def 方法名1(self, 参数, ...): #方法1...def 方法名2(self, 参数, ...): #方法2...

其中,名为__init__的方法,是进行初始化的方法,也称为构造函数,只在生成类的实例对象)时被调用一次。此外,在方法的第一个参数中明确地写入表示自身(自身的实例)的self是Python的一个特点。

  • 举一个简单的例子
class man:def __init__(self, name):self.name = nameprint("Initialized")def hello(self):print("Hello" + self.name)def goodbye(self):print("Goodbye" + self.name)

运行完上述程序后,在IPython控制台中输入m = man("kkk")创建实例,然后输入m.hello()m.goodbye()来调用实例的两个方法。输出结果如下。

这里我们定义了一个类man,然后使用类man生成了实例(对象)m。类man的构造函数会接收参数name,然后用这个参数初始化实例变量self.name(实例变量的名字也可以写为self.n等,这样写的话,后面给实例变量赋值时也要写为self.n)。实例变量是存储在各个实例中的变量。Python中可以像self.name这样,通过在self后面添加属性名来生成或访问实例变量。

5. NumPy

在深度学习的实现过程中,经常会用到NumPy的数组类(numpy.array)中的方法来对数组和矩阵进行计算。

5.1 导入NumPy

  • NumPy是外部库。这里所说的“外部”是指不包含在标准版Python中。因此,首先要导入NumPy库。导入语句为import numpy或者import numpy as np。Python中使用import语句来导入库。这里的import numpy as np的意思就是“将numpy作为np导入”。通过写成这样的形式,之后NumPy相关的方法均可通过np来调用。

5.2 生成NumPy数组

  • 使用np.array()方法可生成NumPy数组。np.array()接收Python列表作为参数,生成NumPy数组(numpy.ndarray)(数据类型)。

5.3 NumPy的算术运算

  • NumPy数组可进行对应元素(element-wise)的运算,需要注意的是,进行对应元素运算的两个数组的元素个数要求相同,可以对数组的各个元素进行算术运算。如果元素个数不同,程序将会报错。
  • NumPy数组还可以和单一的数值(标量)组合起来进行运算。此时的运算是NumPy数组的各个元素和标量之间进行运算。此功能也被称为广播

5.4 NumPy的N维数组

  • NumPy除了可以生成一维数组,还可以生成多维数组(矩阵)。

上图中生成了2X2的矩阵A。并使用shape方法查看了矩阵A的形状,通过dtype方法查看了矩阵元素的数据类型。

  • NumPy生成的矩阵还可以在相同形状的矩阵间进行对应元素的算术运算。并且,也可以通过标量(单一数值)对矩阵进行算术运算,这也是基于广播的功能。
  • NumPy数组可以生成N维数组。数学上将一维数组称为向量, 将二维数组称为矩阵。另外,可以将一般化后的向量或矩阵等统一称为张量。在此书中,基本上将二维数组称为矩阵,将三维数组及三维以上的数组称为张量多维数组

5.5 广播

  • NumPy中,形状不同的数组之间也可以进行运算。
  • 例如,在5.4中的矩阵A和标量10进行了乘法运算,在这个过程中,标量10被扩展成2X2的形状,然后再与矩阵A进行乘法运算。这种运算方法就称为广播
  • 而且,不同形状的数组之间也可以进行运算。

5.6 访问元素

  • 元素的索引从0开始,可按如下方法进行索引

  • 除此之外,NumPy还可以使用数组访问各个元素

    列表类型的数组也是可以用来访问元素的。

  • 若要获取满足一定条件的元素,可使用布尔型数组。

    同理,列表类型的布尔型数组也可用来访问元素

6. Matplotlib

深度学习的实验中,图形绘制数据可视化非常重要。Matplotlib是用于绘制图形的库,使用Matplotlib可以实现图形的绘制数据的可视化

6.1 绘制简单图形

  • 可以使用matplotlib中的pyplot模块来绘制图形。例如绘制函数y = sin(x)
    首先使用NumPy中的arange方法生成步长为0.1,范围0到6的数组x(不包括6),然后利用NumPy中的sin函数,以x为参数,生成y。最后把x和y作为参数传递给pyplot中的plot方法来绘制图形,最后使用plt.show来显示绘制的图形。

6.2 pyplot的功能

  • pyplot可以对线的形式、颜色等进行修改,还可以对图形添加标签和标题等。
import numpy as np
import matplotlib.pyplot as pltx = np.arange(0, 6, 0.1)
y1 = np.sin(x)
y2 = np.cos(x)plt.plot(x, y1, label = "sin")
plt.plot(x, y2, linestyle = "--", label = "cos") # 用虚线绘制
plt.xlabel("x") # x标签
plt.ylabel("y") # y标签
plt.title("sin & cos") # 标题
plt.legend()
plt.show()

6.3 显示图像

  • pyplot模块还可以实现读取图像与显示图像的功能。
    使用matplotlib.image模块的imread()方法读取图像,使用matplotlib.pyplot模块的imshow()方法显示图像。
import matplotlib.pyplot as plt
from matplotlib.image import imreadimg = imread(r"E:\1_study_postgraduate\deep_learning_from_scratch\code\ch1\welcome.gif")
plt.imshow(img)
plt.show()

  • 这里解释一下为什么用到了两种导入的方法。
  1. import matplotlib.pyplot as plt:这行代码的意思是,导入matplotlib包里面的pyplot模块,并把pyplot模块的名字给等价为plt,这样做的好处就是在后面写代码的时候,就可以用plt三个字母来代替pyplot六个字母。因此,我们在主程序中用到的pyplot模块内的两个方法时,就可以直接通过plt.imshow(img)plt.show()来调用。
  2. from matplotlib.image import imread:这行代码的意思是,从matplotlib.image模块中导入imread()方法,当然也是仅仅导入imread()方法,这就意味着matplotlib.image模块中的其他方法在本程序中是不能调用的。如果是通过这种方式来导入方法的话,就可以直接在程序中输入方法的名字来使用该方法,类似于imread(r"E:\1_study_postgraduate\deep_learning_from_scratch\code\ch1\welcome.gif"),而不需要先加模块名再引用方法,类似于plt.imshow(img)
  • 所以,正是因为主程序中用到了pyplot模块中的两个方法,为了方便起见,该程序的编写者采用了import matplotlib.pyplot as plt这一导入方式。
  • 知道了这两种导入方法的区别后,就可以自己来改一改上面的代码了,下面是我改的代码
from matplotlib.image import imread
from matplotlib.pyplot import imshow
from matplotlib.pyplot import showimg = imread(r"E:\1_study_postgraduate\deep_learning_from_scratch\code\ch1\welcome.gif")
imshow(img)
show()

6.4 补充知识:Python中的包、模块、方法的逻辑关系

  • 首先给出它们三个的结构关系:包→模块→方法,对应于英文就是:package→module→function。
  • 包(package):包是一个类似文件夹的东西,它里面包含了很多.py文件还有一个__init__.py文件,init.py这个文件是描述有多少个模块的东西。该目录下一定得有这个__init__.py文件和其它模块或子包。
    下图就是matplotlib包的文件结构。
  • 模块(module):在Python中一个.py文件就可以称为一个模块,其表达的含义是实现了某个功能。
    下图中橙色箭头所指的就是matplotlib包中的pyplot模块
  • 方法(function):方法其实就是定义在一个模块里面的一个函数,因为function翻译为中文后可以叫方法,也可以叫函数,所以今后在文章中提到的方法或者函数,指的都是同一个东西。
    下图为matplotlib包里的pyplot模块内的plot()方法的定义。

7. 小结

  • 本章重点介绍了实现深度学习(神经网络)所需的编程知识,以为学习深度学习做好准备。
  • 想进一步了解Python,可以参考下面这些图书。
    Python语言及其应用》:这是一本详细介绍从Python编程的基础到应用的实践性的入门书。
    利用Python进行数据分析》:对NumPy进行了简单易懂的总结。
    此外,“Scipy Lecture Notes” 这个网站上也有以科学计算为主题的NumPy和Matplotlib的详细介绍。

下载地址:

  • Python语言及其应用》:
    链接:https://pan.baidu.com/s/13yyzNKKYIggSKDNKZS4kpw
    提取码:lzpj
    复制这段内容后打开百度网盘手机App,操作更方便哦
  • 利用Python进行数据分析》:
    还未更新。

深度学习入门基于Python的理论与实现_第一章_Python入门(原创笔记)相关推荐

  1. 《深度学习入门--基于python的理论与实现》——斋藤康毅读书笔记

    <深度学习入门--基于python的理论与实现>读书笔记(第二章) 写在前面 第二章:感知机 2.1感知机是什么 2.2简单的逻辑电路 2.2.1与门(and gate) 2.2.2与非门 ...

  2. 深度学习入门 基于Python的理论与实现

    作者:斋藤康毅 出版社:人民邮电出版社 品牌:iTuring 出版时间:2018-07-01 深度学习入门 基于Python的理论与实现

  3. 《深度学习入门——基于Python的理论与实现》笔记

    PS:写这篇博客主要是记录下自己认为重要的部分以及阅读中遇到的些问题,加深自己的印象. 附上电子书及源代码: 链接:https://pan.baidu.com/s/1f2VFcnXSSK-u3wuvg ...

  4. 深度学习入门-基于Python的理论入门与实现源代码加mnist数据集下载推荐

    深度学习入门-基于Python的理论入门与实现源代码加mnist数据集下载推荐 书籍封面 1-图灵网站下载 书里也说了,可以图灵网站下载https://www.ituring.com.cn/book/ ...

  5. 《深度学习入门-基于Python的理论与实现》学习笔记1

    <深度学习入门-基于Python的理论与实现>学习笔记1 第一章Python入门 Python是一个简单.易读.易记的编程语言,可以用类似于英语的语法进行编写程序,可读性高,且能写出高性能 ...

  6. 深度强化学习:基于Python的理论及实践(英文版)

    深度强化学习结合了深度学习和强化学习,使人工智能体能够在没有监督的情况下学习如何解决顺序决策问题.在过去的十年中,深度强化学习在一系列问题上取得了显著的成果,涵盖从单机游戏和多人游戏到机器人技术等方方 ...

  7. 学习《深入浅出python量化交易交易实战》第一章(笔记)

    1.学习<深入浅出python量化交易交易实战>第一章 记录学习过程中的代码和一些坑 1.1 基础(名词解释) 1.1.1 CAPM (Capital Asset Pricing Moda ...

  8. python从入门到精通 邮电出版社_《人民邮电出版社Python深度学习入门:基于PYTHON的理论与实现》【价格 目录 书评 正版】_中国图书网...

    译者序 xiii 前言 xv 第 1 章 Python入门 1 1.1 Python是什么 1 1.2 Python的安装 2 1.2.1 Python版本 2 1.2.2 使用的外部库 2 1.2. ...

  9. 《深度学习入门——基于Python的理论与实现》斋藤康毅学习笔记(二)

    第二章 感知机 1逻辑门 错误:python 出现的异常 inconsistent use of tabs and spaces in indentation 意思是:在缩进中不一致地使用制表符和空格 ...

最新文章

  1. linux基本命令iscsiadm,tgtadm和iscsiadm命令的用法
  2. 汉字转拼音插件:LM-PinYin.js
  3. 学习计算机如何有一个质的飞越?
  4. 20. DICOM图像层级分类-DCMTK-层级分类
  5. Euraka配置详解
  6. 基于模板匹配的螺母检测(计算机视觉实验)
  7. idea创建Springboot项目时,出现Error:java: 读取C:\Users\HP\.m2\repository\com\vaadin\external\google\android-js
  8. 台式计算机规格型号怎么查,台式电脑主板型号在哪里看
  9. .mpp文件的使用技巧
  10. 波士顿房价预测(一)
  11. Javascript 中 atob 方法解码中文字符乱码问题
  12. 云测试平台(testin)
  13. 微信公众号模板消息推送(PHP)
  14. 对Livox_avia内置IMU-BMI088进行内参标定
  15. Google Map Key申请流程
  16. 步进电机中的力矩(g.cm),转矩(n.m),扭矩(kg.m)有什么区别?
  17. oracle基础|oracle排序用法|order by用法|where用法
  18. 户外运动品牌的PLM 冒险!PLM软件转型升级常见问题
  19. 多群直播软件有哪些?一起学堂多群直播助手好用吗?
  20. ubuntu双显卡、多屏幕,左上角光标一直闪烁无法进入系统或能进入系统但某个屏幕黑屏

热门文章

  1. 会声会影X8 一打开就提示Corel VideoStudio 已停止工作的解决办法
  2. 记录下mitmproxy做代理,实现淘宝登陆
  3. solr 教程,值得刚接触搜索开发人员一看
  4. html 晃动效果,css3特效(上下左右晃动效果)
  5. 使用PowerShell脚本定制高频英语单词本
  6. matlab fmincon优化,matlab fmincon优化问题
  7. Flink保姆级教程,超全五万字,学习与面试收藏这一篇就够了
  8. 怎么做才能有效的进行App推广呢?
  9. java服务端开发支付宝支付接口,网页支付与app支付
  10. 现在手机的常用接口有几种