前言
近期在摸索深度学习,本系列博客将会围绕基于PyTorch框架实现算法网络,后续中所谈到的内容均来自有关资料书籍,予以记录与诸君分享,当然也欢迎大家批评指正。
一、Numpy简介
在机器学习和深度学习中,图像、声音、文本等输入数据最终都要转换 为数组或矩阵。如何有效地进行数组和矩阵的运算?这就需要充分利用 Numpy。Numpy是数据科学的通用语言,而且与PyTorch关系非常密切,它 是科学计算、深度学习的基石。尤其对PyTorch而言,其重要性更加明显。 PyTorch中的Tensor与Numpy非常相似,它们之间可以非常方便地进行转 换,故此掌握好Numpy是掌握好Pytorch的重要基础。
二、Numpy使用
1.从已有数据中创建数组
直接对Python的基础数据类型(如列表、元组等)进行转换来生成 ndarray:
1)将列表转换成ndarray:
import numpy as np
#将列表转换成ndarray:
lst1 = [3.14, 2.17, 0, 1, 2] #注意列表有逗号
nd1 = np.array(lst1)
print(nd1) # [3.14 2.17 0. 1. 2. ]#数组没有逗号
print(type(nd1)) # <class 'numpy.ndarray'>
2)嵌套列表可以转换成多维ndarray:
lst2 = [[3.14, 2.17, 0, 1, 2], [1, 2, 3, 4, 5]] #注意这里是二维,一维可以看作表格中的一行,二维则是两行
nd2 = np.array(lst2)
print(nd2) # [[3.14 2.17 0. 1. 2. ] # [1. 2. 3. 4. 5. ]]
print(type(nd2)) # <class 'numpy.ndarray'>
注:如果把上面示例中的列表换成元组也同样适用。
2.利用random模块生成数组
在深度学习中,我们经常需要对一些参数进行初始化,因此为了更有效 地训练模型,提高模型的性能,有些初始化还需要满足一定的条件,如满足 正态分布或均匀分布等。这里介绍了几种常用的方法,如表1-1所示列举了 np.random模块常用的函数。
下面来看一些函数的具体使用:
nd3 = np.random.random([3, 3])
print(nd3)
# [[0.43007219 0.87135582 0.45327073]
# [0.7929617 0.06584697 0.82896613]
# [0.62518386 0.70709239 0.75959122]]
# print("nd3的形状为:",nd3.shape) # nd3的形状为: (3, 3)
#为了每次生成同一份数据,可以指定一个随机种子,使用shuffle函数打乱生成的随机数
nd4 = np.random.randn(2, 3)
print(nd4)
np.random.shuffle(nd4)
print("随机打乱后数据:")
print(nd4)
print(type(nd4))
# [[-0.23042745 0.67994083 -1.45989658]
# [ 1.56310165 -1.07267341 0.54721811]]
# 随机打乱后数据:
# [[ 1.56310165 -1.07267341 0.54721811]
# [-0.23042745 0.67994083 -1.45989658]]
# <class 'numpy.ndarray'>
3.创建特定形状的多维数组
参数初始化时,有时需要生成一些特殊矩阵,如全是0或1的数组或矩 阵,这时我们可以利用np.zeros、np.ones、np.diag来实现,具体函数如下表所示
下面通过几个示例说明:
#