深度学习如今已经深入我们生活的方方面面——自动驾驶、图像识别、AI翻译……但想真正学会它,我们首先需要掌握一门工具:Python。
在这一章里,我们将通过最简单的方式,带你一步步走进Python的世界,为之后实现深度学习系统打好基础。
如果你已经熟悉Python、NumPy和Matplotlib等工具,可以跳过本章,直接进入后面内容。但如果你是初学者,接下来我们一起从零开始。
1.1 什么是Python?
Python 是一种简单、易读、易记的编程语言。它是开源的,可以自由使用。
Python 的语法像英语一样自然,用起来轻松容易,尤其适合初学者。很多大学甚至将其作为第一门编程语言。
不仅如此,Python 的代码可读性高,执行效率也不差。无论是编写快速响应的程序,还是处理大规模数据,Python 都表现优秀。因此,不论你是初学者还是专业程序员,Python 都是值得掌握的语言。
如今,Google、Microsoft、Facebook 等顶尖公司都大量使用 Python。特别是在人工智能和数据分析领域,Python 已成为事实上的“标准语言”。
深度学习框架如 TensorFlow、PyTorch、Chainer 等,都提供了Python接口。所以,学习Python,对你学习深度学习大有帮助。
1.2 Python的安装
1.2.1 Python版本选择
Python 目前有两个主要版本:2.x 和 3.x。虽然 2.x 仍在被部分使用,但本书以 Python 3.x 为标准。
需要注意的是,2.x 和 3.x 不兼容,用 3.x 写的代码不能直接在 2.x 中运行。因此,请安装 Python 3.x。
1.2.2 使用的外部库
本书目标是“从零开始实现深度学习”,我们尽量避免依赖外部库。
但有两个例外:
-
NumPy:用于数值计算,提供矩阵、数组等结构。
-
Matplotlib:用于绘图,能将实验结果可视化。
这两个库是深度学习实现的重要工具。
1.2.3 推荐使用Anaconda
我们推荐使用 Anaconda,这是一个包含Python及各种数据分析库的“集成版”发行包。安装Anaconda后,你就拥有了Python、NumPy、Matplotlib等常用工具,省去了单独配置环境的烦恼。
下载安装地址:Anaconda | Built to Advance Open Source AI
请务必选择 Python 3.x 版本的 Anaconda。
1.3 Python解释器
安装完成后,在终端输入以下命令,确认是否成功安装:
python --version
如果显示 Python 3.x.x
,说明安装成功。
输入 python
可以进入 Python 解释器:
$ python >>>
解释器模式也叫“对话模式”,可以直接输入命令,让Python给你“答复”。
python
>>> 1 + 2
3
1.3.1 算术计算
Python 可以进行加减乘除、乘方等操作:
# 减法运算
result1 = 1 - 2
print(result1)
# 乘法运算
result2 = 4 * 5
print(result2)
# 除法运算
result3 = 7 / 5
print(result3)
# 幂运算
result4 = 3 ** 2
print(result4)
注意:**
表示“乘方”。
1.3.2 数据类型
Python有多种数据类型,可使用 type()
查看类型:
# 检查整数的类型
print(type(10))
# 检查浮点数的类型
print(type(2.718))
# 检查字符串的类型
print(type("hello"))
1.3.3 变量
你可以用 =
给变量赋值:
# 给变量 x 赋值为 10 并打印
x = 10
print(x)
# 重新给变量 x 赋值为 100 并打印
x = 100
print(x)
# 给变量 y 赋值为 3.14
y = 3.14
# 计算 x 和 y 的乘积并打印
result = x * y
print(result)
# 检查 x * y 结果的类型并打印
print(type(result))
Python 是动态类型语言,变量类型会自动根据赋值变化。
1.3.4 列表(数组)
用 []
可以创建列表:
# 创建一个列表并赋值给变量 a
a = [1, 2, 3, 4, 5]
# 打印列表 a
print(a)
# 访问列表 a 的第一个元素
print(a[0])
# 修改列表 a 的第五个元素
a[4] = 99
# 打印修改后的列表 a
print(a)
可以使用“切片”获取子列表:
# 定义列表
a = [1, 2, 3, 4, 5]
# 切片操作:获取索引 1 到索引 3(不包含 3)的元素
slice_1 = a[1:3]
print(slice_1)
# 切片操作:获取从开头到索引 3(不包含 3)的元素
slice_2 = a[:3]
print(slice_2)
# 切片操作:获取从开头到倒数第一个元素(不包含倒数第一个元素)的元素
slice_3 = a[:-1]
print(slice_3)
1.3.5 字典
字典用 {}
创建,存储“键-值”对:
# 创建一个字典并赋值给变量 me
me = {'height': 180}
# 访问字典 me 中键 'height' 对应的值
print(me['height'])
# 向字典 me 中添加键 'weight' 并赋值为 70
me['weight'] = 70
# 打印修改后的字典 me
print(me)
1.3.6 布尔型
Python中的 bool
只取 True
或 False
:
>>> hungry = True
>>> sleepy = False
>>> type(hungry)
>>> not hungry
False
>>> hungry and sleepy
False
>>> hungry or sleepy
True
1.3.7 条件语句(if)
hungry = False
if hungry:
print("I'm hungry")
else:
print("I'm not hungry")
print("I'm sleepy")
注意:Python 使用 缩进 来表示代码层级,通常为4个空格。
1.3.8 循环语句(for)
for i in [1, 2, 3]:
print(i)
1.3.9 函数
函数定义方式如下:
def hello(name):
print("Hello " + name + "!")
hello("cat")
1.4 Python脚本文件
1.4.1 保存为文件
将代码保存为 hungry.py
:
print("I'm hungry!")
在终端运行:
$ python hungry.py
I'm hungry!
1.4.2 类的使用
自定义类示例(保存为 man.py
):
class Man:
def __init__(self, name):
self.name = name
print("Initialized!")
def hello(self):
print("Hello " + self.name + "!")
def goodbye(self):
print("Good-bye " + self.name + "!")
m = Man("David")
m.hello()
m.goodbye()
Initialized!
Hello David!
Good-bye David!