矩阵数学和Numpy
数据维度
一个数字表示人的身高(厘米)或者一系列的数字表示此人的各种特征,例如身高 体重和年龄或者有一张关于此人的图片,它由某种网络构成,每个位置都是一个像素。
表示该图片中单个像素的一种方法是使用三个数字分别表示红色、蓝色和绿色通道的数值,我们将这些不同的数据形状描述为数据的维度。
首先是最小、最简单的形状,即单个数值
例如1 2.4 或 -0.3,这些叫做标量。我们可以看出标量的维度为零
我们无法可视化零维度,标量就是这么定义的
可以从示例中看出,人的身高是标量,形状是零维度
接着,由一列数据构成的数,叫做向量
向量包括两种类型,行向量和列向量,它们可以存储相同的内容
但从概念上说,你会将行向量想象成从左到右水平排列的[1 2 3]
将列向量看做从上到下排列的
惯用哪一种向量,通常只是个人喜好
但是有时候,向量的形状会影响到数学运算的形式
但不管怎么说,向量是一维的量,我们称其为长度,所以这两个向量的长度都为3
体重和年龄 可以存储为向量
接着是矩阵
矩阵是二维的值,我们用行和列来描述矩阵的形状
如果有这两行数据[1 2 3]和[4 5 6],则是两行及三列,我们称其为2*3的矩阵
如果图片中的每个像素有一个数字,那么可以将这些像素值存储到矩阵中
最后是张量
TensorFlow库的所有数据都是张量形式
张量可以指任何n维的值集合,所以标量是零维张量、向量是一维张量、矩阵是二维张量、任何大于二维的对象,我们就称之为张量
更高维度的数据,难以可视化
对于三维,你可以想象成矩阵堆栈/矩阵列表/向量矩阵
对于四维,可以想象成一种矩阵,其中每个项目本身都是一个矩阵或一个矩阵列表的列表或者还可以是其他形式,随着维度的增多,越来越复杂
即使很难想象数据如何组织,但我们依然能对他们进行数学运算
如果图片每个像素的每个颜色通道都有一个单独的值,我们可以将这些值存储为三维张量,并用单独的平面表示红色、绿色和蓝色值
对于向量,可以将其看作矩阵,其中的维度是1
例如之前长度为3的向量,可以将这个行向量看作13的矩阵,将这个列向量看作31的矩阵
有时候还需要指代矩阵中某个特定元素,我们通过索引(即行和列位置)进行指代,如果这个矩阵称为A,则它各个位置的数可以被这样指代,第一行的索引是a11、a12、a13,第二行的索引是a21、a22、a23,所以a32的值是8
NumPy中的数据
元素级矩阵运算
标量数学就是平常的加法等等,有时就像神经网络一样需要对很多数字执行运算,甚至可能上百万,这些数字可能成百上千,你需要可能将它们翻一番,进行平方或除以相同的数字。如果你在编写一个程序,你可能会创建一个循环 迭代每个值 并一遍遍对每个值执行相同的操作,但是矩阵提供了更好的替代方法。如果你将所有的数字存储在一个矩阵中,你可以对它们执行元素级操作,这意味着你要在矩阵中分别处理它们,然后对元素每个执行同样的操作。元素级概念适用于任意维数的数据,要加上两个标量的话,很简单,就像2+3=5,要加上一个标量和一个矩阵的话,实际上做法是相同的,只需给矩阵当中的每一项加上一个标量,所以2加上矩阵当中的1、2、3、4就得到了矩阵当中的3、4、5、6
假设我们有一个值矩阵,代表图像的红色通道,每个值是单个字节,范围从0到255,如果要归一化并把它们都转化为浮点值,如何做?
本文作者 : Matrix
原文链接 : https://matrixsparse.github.io/2017/05/17/深度学习-矩阵数学和Numpy/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
知识 & 情怀 | 二者兼得