Keras深度学习基础概念的建立

Keras深度学习基础概念的建立


  • 什么是张量(tensor)
  • 如何操纵张量的维度
  • 实际生活中的张量
  • 张量的运算(神经网络运转的“齿轮”)

正文

  • 张量是一个任意维度的数据容器,我们很常见的有一维向量如[0,1,2,3],二维张量如矩阵,张量的维度是不收限制是任意的。并且值得注意的是张量只能存放数据,是一个数据容器。
    • 张量维度的判断方法:对弈一个张量,最外层有几个括号就是几维的张量,特别是在pytohn语言中,我们可以轻易的通过列表最大的层数来判断其维度,
    • 在Python科学计算包中,可以通过numpy来得到张量的维度,我们把数据通过np.array(list)传入,这之后,就可以通过array的ndim属性来得到张量的维度

  • 从上文我们也知道,在Python中操纵张量的最好工具就是numpy。我们知道如果一个array他的ndim属性为3,那么的shape必定为一个含有三个数据的数值,反向推理我们可以知道:如果我们改变这个数组的shape例如从含有三个数值到含有两个数值,呢么其维度必然下降到二维,这在神经网络中是很有必要的,因为TensorFlow要求输入的张量有一定的维度要求。如下图
    Keras深度学习基础概念的建立

  • 在实际应用中我们会经常遇到不同维度的张量典型的图像数据为4D(即四维张量),视频数据为5D,还有一个我们可以自己定义的张量

    • 对与一个统计人的信息的数据集,假如有一万个人,我们可以定一个1w的样本轴作第一个维度,每个人又有社保,工资,邮编等数据,所以可以存储在(10000,3)这样一个张量中。
  • 接下来是最重要的张量计算,这个是Keras神经网络运算的基础。通常有以下这些操作:

    • 逐元素的运算,例如我要对这个数组内的所有元素取指数或者进行别的函数运算,这个通常还是用numpy实现的,numpy中集成了大量的对于任意维张量的逐个元素的运算。如下Keras深度学习基础概念的建立
    • 另一种是张量与张量之间的运算,例如把两个张量相加。但是这里会出现一个问题,我们把不同纬度之间的张量相加会怎么样的? 不用担心这个问题,numpy存在一个广播机制,对不同维度的张量进行加法运算时他会这么做
      • 首先向较小的张量种补齐所需要的轴维度是两者的ndim相同。
      • 然后较小的张量会沿着新轴重复,知道匹配大张量。
    • 还有一种最重要的张量运算----点积,也就是线性代数中的矩阵的点积,他们的原理是相同的。我们通常使用numpy.dot来完成张量之间的点积。