输入输出维度

       在本节的博客中将整理对于输入输出维度的相关认识,总结如下:

       在之前发布的博客《PyTorch深度学习实践——反向传播》中谈到了自己对于一个模型输入的维度认识:不同的维度类似于不同的属性,从不同的方向上来描述一个模型,使得模型愈加的丰满具体。

       但这种理解过于抽象,没有实际的理论依据,在机器学习中如果没有引入向量和矩阵的相关概念就来讨论维度也显得非常不严谨而且让人容易混淆,因此在使用PyTorch实现线性回归时,输入维度中引入了tensor张量,使得自己出现了很多疑问,在经过宝藏学长的耐心讲解后,对于维度这个概念有了重新的理解,以下从四个方面来阐述什么是维度:①认知②空间③数学④机器学习

     ①认知上:从我们的认知上而言,维度不妨去这样理解:不同的维度就像一个物体的不同属性,这些不同的属性从不同的方向上来描述一个物体,使得物体愈加的丰满具体。因此维度的增加使得我们现实中的物体由抽象变为了具体

   ②空间上:在空间中,我们知道,0维代表一个点,1维代表一条线,2维代表一个面,3维代表一个体....0维的点是一个无穷小的点,没有方向也没有大小,无数0维的点便构成了1维的线,换言之,1维的线的截面便是0维的点,同理无数1维度的线变构成了2维的面,2维的面的截面便是1维的线,无数2维的面叠加变形成了3维的体,3维的体的截面是2维的面....我们无法想象出四维的形状但我们也能推出,4维由无数3维的体叠加,而每一个截面也是3维的体

   ③数学上:从空间上我们知道了0维,1维,2维,3维的基本概念,我们也能在脑子中想象出由0维到3维的过程画面,但是数学上而言又是怎么体现出维度的呢?

     假定一个方程f(x)=x,显而易见这是一条直线,那么为什么会是一条直线呢?因为自变量x只有一个,换句话来讲,也就是只从x这一空间方向上来构成这个方程,同理当f(x,y)=x+y,我们可以看做从两个空间方向上来构成了这一个函数,因此形成的是一个面,而f(x,y,z)=x+y+z,由于从三个方向上来构成了这个函数,因此是一个体,在这些例子中,当k=f(x)时,对于因变量k,因变量形状的构成依赖于自变量的个数,而这种关系可以通过数学上的几何坐标形式来体现,也就是当自变量的个数增多,几何空间轴变多,k变量代表物体实现了由0维到多维的跨度,而这反应了变量维度和空间维度的区别

    在线性代数中我们学习过矩阵,矩阵的设计是用来解决多元方程问题,我们举出一个例子:

    假定一个方程f(x,y,z)=k,这是一个三维体,因变量k由x,y,z三个变量关系构成,当因变量k值确定,代表的三维体的某点确定,当我们从x,y,z三个方向分别确定自变量的值时,意味着我们实际上是在通过三个不同方向确定各自位置来找寻这一个由自变量到因变量唯一对应关系,那么如何实现这种确定关系呢?我们需要通过三个方程联立求得这种关系,也就是利用三种方程的输入到输出关系来得到最终对应关系

  假定这个方程这样成立了这样三种关系

深度学习中的维度如何设置 维度与深度_机器学习

深度学习中的维度如何设置 维度与深度_机器学习_02

    ④在机器学习中:在这个矩阵中,因为是一个矩阵(面)所以也有2个维度,在机器学习中第0维度代表样本维度,第一维度代表变量维度(特征维),根据数学中的理解,这个变量维度又分为自变量的维度和因变量的维度,在这个例子中我们可以知道,自变量有三个维度(三个输入方向)因变量有一个维度(一个输出方向),样本维度有三,也就三种不同的方程来体现这种输入到输出的关系,对应tensor张量是这样来进行描述的:

深度学习中的维度如何设置 维度与深度_机器学习_03

深度学习中的维度如何设置 维度与深度_一维数组_04

表明tenssor张量中构建出了3行4列的矩阵

 再与手动实现的x_data,y_data的输入作比较:

深度学习中的维度如何设置 维度与深度_深度学习_05

 

深度学习中的维度如何设置 维度与深度_pytorch_06

   我们可以看出,对于手动实现的输入维度,我们这样假定数据其实是存在问题的,一维数组无法让我们知晓矩阵的行列,因此x_data,y_data可以看作一个输入维度,一个输入维度,三个样本,同样也能看作,一个输入样本,三个输入和输出的维度,而对于pytorch引入的tensor张量我们便不存在这个问题,因此一位数组我们一般不讨论维度(一维数组看作矩阵既能当作行向量也能看作列向量),而二维数组引入了行列下表,便可以当作二维矩阵看待

深度学习中的维度如何设置 维度与深度_深度学习_07

     值得注意的一点,特征维分为了自变量特征维和因变量特征维,将特征维度分成两个对应的二维矩阵再使得数据的输入与输出维度对应更易于理解与处理。

     以上总结是为了是自己能对之前的疑问进行合理的解释,但由于自己刚接触深度学习并且还未学习过线代,导致部分概念加入了自己的揣测,在更深层次学习后会对博文不正确地方进行修改,有错误的地方请大佬们理解与指正,感激不尽!