3D机器学习(3):pytorch入门2:MNist数据集、ReLU函数、张量的概念与建立

 

1.MNist数据集

手写0-9,每个数字有7000张,一共70K张,其中60k用作训练,10k用作验证。每张照片采用灰度图,28*28的矩阵,矩阵的每个数字0or1,表示黑或白。也可以表示成1*784的一维向量。

3D机器学习(3):pytorch入门2:MNist数据集、ReLU函数、张量的概念与建立_第1张图片

  1. 这里的y可以采用独热编码(One-Hot),即一个1*10的向量。比如如果有三层嵌套,则y=H3,当H3=[0,1, 0,8 ,0,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0]时,代表y的预测结果为:
  1. 0的概率为0.1,
  2. 1的概率0.8,
  3. 2的概率0.1,
  4. 3-9的概率为0。

所以预测图片很可能是1,因此识别结果为1。

3D机器学习(3):pytorch入门2:MNist数据集、ReLU函数、张量的概念与建立_第2张图片

3D机器学习(3):pytorch入门2:MNist数据集、ReLU函数、张量的概念与建立_第3张图片

  1. 三层嵌套中,需要求解的是,中各个矩阵的维度:

  1. X是一个1*784的一维向量
  2. H3就是要输出的结果y,一个1*10的向量,在这里可以用d3暂时表示。
  3. W1是784*d1的矩阵,b1是一个1*d1的矩阵。
  4. w2是d1*d2的矩阵,b2是一个1*d2的矩阵。
  5. W3是d2*d3的矩阵,b3是一个1*d3的矩阵。

 

 

  1. Loss的计算:用(y 的预测值减去y的实际值)的平方=loss函数,即当loss函数最小时的参数即为学习好的参数。需要学习的参数有[w1,w2,w3],[b1,b2,b3]这6个参数,这6个参数就是6个矩阵。

3D机器学习(3):pytorch入门2:MNist数据集、ReLU函数、张量的概念与建立_第4张图片 3D机器学习(3):pytorch入门2:MNist数据集、ReLU函数、张量的概念与建立_第5张图片

  1. 多层线性函数嵌套仍为线性,因此需要加入:激活函数。这里可以加入ReLU函数,梯度很好计算,不是0就是1;其次

 

3D机器学习(3):pytorch入门2:MNist数据集、ReLU函数、张量的概念与建立_第6张图片

6、获取label的函数可用argmax函数,取值向量中最大的分量,再提取其编号作为编号。即label=argmax(prep)

3D机器学习(3):pytorch入门2:MNist数据集、ReLU函数、张量的概念与建立_第7张图片

 

 

 

 

# pytorch张量操作

  1.  

3D机器学习(3):pytorch入门2:MNist数据集、ReLU函数、张量的概念与建立_第8张图片

  1. 怎么用one-hot编码字符串?比如有26个字母,那个就可以用1*26的向量表示每一个字母。但是汉字有上万个,则需要1*上万的向量表示某一个汉字。
  2. 在pytorch中,只需要关注这几个数据类型:浮点数“floattensor”\判断类型”bytetensor”\整数型”intTensor”。就是这三个打钩的。但在GUP中名称需要加入cuda。

3D机器学习(3):pytorch入门2:MNist数据集、ReLU函数、张量的概念与建立_第9张图片

  1. Tensor的检验。比如随机创建一个2行3列的矩阵,其中每个元素属于(0,1),输出a.type()可返回数据类型,输入isinstance(a,某种数据类型)可返回判断结果。     

3D机器学习(3):pytorch入门2:MNist数据集、ReLU函数、张量的概念与建立_第10张图片

比如说刚开始不是部署在cuda上,因此false,当使用data.cuda()将数据搬到GPU上后,改变了数据的类型,则显示true。

3D机器学习(3):pytorch入门2:MNist数据集、ReLU函数、张量的概念与建立_第11张图片

 

  1. 0维张量表示=标量,即一个数,比如下图中分别表示1.0\1.3,常用语loss函数的输出值。1维张量表示一个向量。

3D机器学习(3):pytorch入门2:MNist数据集、ReLU函数、张量的概念与建立_第12张图片

  1.  2维张量表示=矩阵。[2,3]表示2行三列的矩阵。Size\dim\shape,a.shape和a.size()两个函数所实现的功能一样。a.numel()返回number of element ,数字的个数。

3D机器学习(3):pytorch入门2:MNist数据集、ReLU函数、张量的概念与建立_第13张图片

  1. 3维张量表示:比如说这是一个三维张量,三个维度分别是(2,3,4),表示:这个张量由2个矩阵组成,每个矩阵为3行4列。适合使用在NLP里面,比如[10,20,100]可表示10个单词,每次处理20句话,每个单词用100维向量表示(这个单词表只有100个单词)。

3D机器学习(3):pytorch入门2:MNist数据集、ReLU函数、张量的概念与建立_第14张图片

  1. 4维向量:[b,c,h,w,]=[照片数量batch,通道数channel,高度height,宽度width],比如2,3,28,28表示一次处理2张照片,每个照片都是三通道,且像素是28*28。所以特别适合卷积神经网络。

3D机器学习(3):pytorch入门2:MNist数据集、ReLU函数、张量的概念与建立_第15张图片

 

Torch.tensor小写的接受现有的数据,仅用这个就OK。torch.Tensor大写的接受数据的维度,尽量少用,容易混淆。

 

[1,2]这种括号表示直接填入数据,(2,3,28,28)表示先指定数据维度shape。建议先指定数据维度,再赋值。

 

但是需要注意,指定完数据维度后,计算机自动填充随机数据,数据可能很大或很小,直接运算时可能会意外的报错,因此运算前及时导入自己的数据。

 

【如何创建张量】

当然可以使用一些指定的初始化方法:

  1. Torch.rand 每个元素随机0-1
  2. Torch.randint 可指定每个元素范围
  3. Torch.randn 每个元素随机0-1,且符合正态分布
  4. Torch.full([2,3],7)每个元素都是7的2*3矩阵
  5. Torch.ones 指定元素全为1
  6. Torch.zeros 指定元素全为0
  7. Torch.arrange 指定元素为等差数列
  8. Torch.linspace 指定元素范围并等分
  9. Like功能:抄别的张量的数据维度shape

 

【张量维度变换】

  1. View=reshape,合并维度,比如将28*28合并为784的单行,但不可逆,慎用。
  2. unsqueeze:插入维度,增加维度。比如从1维张量扩展为4维张量。比如如下图,想合并b、f,则需要先把二者变成通同维度。因此将b扩张3个维度。

3D机器学习(3):pytorch入门2:MNist数据集、ReLU函数、张量的概念与建立_第16张图片

  1. expand/repeat:单个维度的扩展,比如扩展行数、列数、矩阵个数。把第一个维度中的照片个数从一个扩展为4张。

3D机器学习(3):pytorch入门2:MNist数据集、ReLU函数、张量的概念与建立_第17张图片

  1. a.t():将a矩阵转置。
  2. transpose:更广意义上的转置,即交换维度,一次交换两个维度。
  3. permute:更广意义上的转置,即交换维度,一次可交换所有维度。
  4. 对比两个张量:比如比较a、a1是否完全all相等equ?0表示不相等,1表示相等。

3D机器学习(3):pytorch入门2:MNist数据集、ReLU函数、张量的概念与建立_第18张图片

   

 

你可能感兴趣的:(3D机器学习(3):pytorch入门2:MNist数据集、ReLU函数、张量的概念与建立)