为了不被淘汰,只能赶快学起来了!chatgpt的大火带动了很多AI行业的快速发展,也导致了失业潮一波又一波,就业难等等,和我一样迷茫的小伙伴一起学起来吧!1.环境搭建1.1 安装Minicondawindows安装miniconda比较简单不再赘述。 https://docs./en/latest/miniconda.html 下载win版安装即可。 1.2 创建环境打开cmd命令行执行如下命令: conda create --name d2l python=3.9 -y 激活 conda activate d2l 安装pytorch,之前在公众号有发过深度学习环境的搭建教程,这里直接根据自己的cuda版本执行命令即可 pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113 1.3 安装jupyter notebookjupyter 算是python学习很不错的一款工具,这里不再赘述 在启动jupyter notebook时,有报错信息,如下: ModuleNotFoundError: No module named jupyter_nbextensions_configurator 解决报错:
2.数据操作首先我们介绍n维数组,也称为张量(tensor).在pytorch中的张量与Numpy的ndarray类似。但深度学习的框架比Numpy中的ndarray多一些重要的功能:首先GPU很好地支持加速计算,其次,张量类支持自动微分。这些功能使得张量类更适合深度学习。 2.1.1 入门首先,我们导入torch import torch 张量表示一个由数值组成的数组,这个数组可能有多个维度。具有一个轴的张量对应数学上的向量(vector);具有两个轴的张量对应数学上的矩阵(matrix);具有两个轴以上的张量没有特殊的数学名称。 首先,我们使用arange创建一个行向量x。这个行向量包含以0开始的前12个整数,它们默认创建为整数。也可以指定创建类型为浮点数。张量中的每个值都称为张量的元素(element)。除非额外指定,新的张量将存储在内存中,并采用CPU计算。 x = torch.arange(12) tensor([0,1,2,3,4,5,6,7,8,9,10,11]) 可以通过张量的shape属性类访问张量的形状。 张量的形状指的是每个(Dimension)轴由多少个元素组成的信息。 x.shape torch.Size([12]) #张量中元素的总数 12 #要想改变一个张量的形状而不改变元素数量和元素值,可以调用reshape函数。例如,可以把张量x从形状为(12,)的行向量转换为形状为(3,4)的矩阵。 tensor([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) #生成全0的张量 tensor([[[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]], [[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]]]) #生成全1的张量 tensor([[[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]], [[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]]]) #生成随机值,且每个元素都从均值为0、标准差为1的标准高斯分布(正态分布)中随机采样。 tensor([[-0.7534, -0.4173, 0.8888], [-1.5095, -0.6197, -0.4746]]) # 通过python列表为张量赋值 ,在这里,最外层的列表对应于轴0,内层的列表对应于轴1。 tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]]) 2.1.2 运算符对于任意具有相同形状的张量, 常见的标准算术运算符( #运算符 (tensor([ 3., 4., 6., 10.]), tensor([-1., 0., 2., 6.]), tensor([ 2., 4., 8., 16.]), tensor([0.5000, 1.0000, 2.0000, 4.0000]), tensor([ 1., 4., 16., 64.])) #求幂运算 tensor([2.7183e+00, 7.3891e+00, 5.4598e+01, 2.9810e+03]) #多个张量连结(concatenate) (tensor([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.], [ 2., 1., 4., 3.], [ 1., 2., 3., 4.], [ 4., 3., 2., 1.]]), tensor([[ 0., 1., 2., 3., 2., 1., 4., 3.], [ 4., 5., 6., 7., 1., 2., 3., 4.], [ 8., 9., 10., 11., 4., 3., 2., 1.]])) #通过逻辑运算符构建二元张量 tensor([[False, True, False, True], [False, False, False, False], [False, False, False, False]]) #对张量中的所有元素求和会产生一个单元素张量 tensor(66.) 2.1.3 广播机制#在某些情况下,即使张量形状不同,我们也可以通过调用广播机制来执行按元素操作 (tensor([[0], [1], [2]]), tensor([[0, 1]]), tensor([0, 1])) #由于a和b分别是矩阵,如果让它们相加,它们的形状不匹配。我们将两个矩阵广播为一个更大的矩阵, tensor([[0, 1], [1, 2], [2, 3]]) 2.1.4 索引和切片就像在任何其他Python数组中一样,张量中的元素可以通过索引访问。与任何Python数组一样:第一个元素的索引是0,最后一个元素索引是-1;可以指定范围以包含第一个元素和最后一个之前的元素。 如下所示,我们可以用 X[-1],X[1:3] (tensor([ 8., 9., 10., 11.]), tensor([[ 4., 5., 6., 7.], [ 8., 9., 10., 11.]])) #指定元素写入矩阵 tensor([[ 0., 1., 2., 3.], [ 4., 5., 9., 7.], [ 8., 9., 10., 11.]]) #多个元素赋相同值 [0:2, :]访问第1行和第2行,其中“:”代表沿轴1(列)的所有元素 tensor([[12., 12., 12., 12.], [12., 12., 12., 12.], [ 8., 9., 10., 11.]]) 2.1.5 节省内存运行一些操作可能会导致为新结果分配内存。例如,如果我们用 # id()函数提供了内存中引用对象的确切地址 (2760437537488, 2760358641424) #这可能是不可取的,原因有两个: id(Z): 2760442838640 id(Z): 2760442838640 #如果在后续计算中没有重复使用X, 我们也可以使用X[:] = X + Y或X += Y来减少操作的内存开销。 True 2.1.6 转换为其他python对象#将深度学习框架定义的张量转换为NumPy张量(ndarray)很容易,反之也同样容易。 (numpy.ndarray, torch.Tensor) #要将大小为1的张量转换为Python标量,我们可以调用item函数或Python的内置函数。 (tensor([3.5000]), 3.5, 3.5, 3) #深度学习存储和操作数据的主要接口是张量(维数组)。它提供了各种功能,包括基本数学运算、广播、索引、切片、内存节省和转换其他Python对象。 ok第一期学习笔记就到这了,希望在看的小伙伴点个在看,支持我继续写下去。 |
|