读书笔记(一)

《深度学习入门》读书笔记

在光看数学式和理论说明无法理解的情况下,可以尝试阅读源代码并运行,很多时候思路都会变得清晰起来。对数学式感到困惑时,就阅读源代码来理解技术的流程,这样的事情相信很多人都经历过。本书通过实际实现(落实到代码)来理解深度学习,是一本强调“工程”的书。书中会出现很多数学式,但同时也会有很多程序员视角的源代码。

生成NumPy数组
要生成NumPy数组,需要使用np.array()方法。 np.array()接收Python列表作为参数,生成NumPy数组(numpy.ndarray)
>>> x = np.array([1.0, 2.0, 3.0])
>>> print(x)
[ 1. 2. 3.]
>>> type(x)
<class 'numpy.ndarray'>

下面是NumPy数组的算术运算的例子。
>>> x = np.array([1.0, 2.0, 3.0])
>>> y = np.array([2.0, 4.0, 6.0])
>>> x + y # 对应元素的加法
array([ 3., 6., 9.])
>>> x - y
array([ -1., -2., -3.])
>>> x * y # element-wise product
array([ 2., 8., 18.])
>>> x / y
array([ 0.5, 0.5, 0.5])


“对应元素的”的英文是 element-wise,比如“对应元素的乘法”就是element-wise product
NumPy数组不仅可以进行element-wise运算,也可以和单一的数值(标量)组合起来进行运算。此时,需要在NumPy数组的各个元素和标量之间进行运算。 这个功能也被称为广播
>>> x = np.array([1.0, 2.0, 3.0])
>>> x / 2.0
array([ 0.5, 1. , 1.5])
 

NumPy的N维数组
二维:

>>> A = np.array([[1, 2], [3, 4]])
>>> print(A)
[[1 2]
[3 4]]
>>> A.shape
(2, 2)
>>> A.dtype
dtype('int64')
运算

>>> B = np.array([[3, 0],[0, 6]])
>>> A + B
array([[ 4, 2],
[ 3, 10]])
>>> A * B
array([[ 3, 0],
[ 0, 24]])
和数组的算术运算一样,矩阵的算术运算也可以在相同形状的矩阵间以对应元素的方式进行。并且,也可以通过标量(单一数值)对矩阵进行算术运算。这也是基于广播的功能。
>>> print(A)
[[1 2]
[3 4]]
>>> A * 10
array([[ 10, 20],
[ 30, 40]])
NumPy 数组(np.array)可以生成 N 维数组,即可以生成一维数组、二维数组、三维数组等任意维数的数组。数学上将一维数组称为向量,将二维数组称为矩阵。另外,可以将一般化之后的向量或矩阵等统称为张量(tensor)。本书基本上将二维数组称为“矩阵”,将三维数组及三维以上的数组称为“张量”或“多维数组”。

广播:NumPy中,形状不同的数组之间也可以进行运算
>>> A = np.array([[1, 2], [3, 4]])
>>> B = np.array([10, 20])
>>> A * B
array([[ 10, 40],
[ 30, 80]])

 

访问元素

>>> X = np.array([[51, 55], [14, 19], [0, 4]])
>>> print(X)
[[51 55]
[14 19]
[ 0 4]]
使用 for语句访问各个元素。
>>> for row in X:
... print(row)
...
[51 55]
[14 19]
[0 4]
除了前面介绍的索引操作, NumPy还可以使用数组访问各个元素。

>>> X = X.flatten()# 将X转换为一维数组
>>> print(X)
[51 55 14 19 0 4]
>>> X[np.array([0, 2, 4])] # 获取索引为0、 2、 4的元素
array([51, 14, 0])
运用这个标记法,可以获取满足一定条件的元素。例如,要从 X中抽出
大于15的元素,可以写成如下形式。

>>> X > 15
array([ True, True, False, True, False, False], dtype=bool)
>>> X[X>15]
array([51, 55, 19])
对NumPy数组使用不等号运算符等(上例中是 X > 15),结果会得到一个布尔型的数组。上例中就是使用这个布尔型数组取出了数组的各个元素(取出 True对应的元素)。NumPy中,主要的处理也都是通过C或C++实现的。因此,我们可以在不损失性能的情况下,使用Python便利的语法。
 

绘制简单图形

可以使用 matplotlib的 pyplot模块绘制图形
绘制sin函数曲线的例子
import numpy as np
import matplotlib.pyplot as plt
# 生成数据
x = np.arange(0, 6, 0.1) # 以0.1为单位,生成0到6的数据
y = np.sin(x)
# 绘制图形
plt.plot(x, y)
plt.show()
这里使用NumPy的 arange方法生成了 [0, 0.1, 0.2, ..., 5.8, 5.9]的数据,将其设为 x

 

在刚才的sin函数的图形中,我们尝试追加cos函数的图形,并尝试使用pyplot的添加标题和x轴标签名等其他功能
import numpy as np
import matplotlib.pyplot as plt
# 生成数据
x = np.arange(0, 6, 0.1) # 以0.1为单位,生成0到6的数据
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()

显示图像
pyplot 中还提供了用于显示图像的方法 imshow()。另外,可以使用matplotlib.image模块的 imread()方法读入图像
import matplotlib.pyplot as plt
from matplotlib.image import imread
img = imread('lena.png') # 读入图像(设定合适的路径!)
plt.imshow(img)
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值