來源:雲栖社群 作者:碼府
張量就是一個變化量。
張量有零階、一階、二階、三階、四階等等。
零階張量是純量(數值)
一階張量是向量(數值和方向的組合)
二階張量是矩陣(向量的組合)
三階張量是資料立體(矩陣的組合)
四階張量(資料立體的組合)
等等。
1、純量就是一個數值,可以看成是一個數值上的變化量。
2、向量是點到點的變化量,而點可以是一維空間上的點、二維空間上的點、三維空間上的點,等等。
一維空間上的點的變化,好像點(x)線上上的移動,也即是左右的線性變化,變化量可以表示為[x1]。
二維空間上的點的變化,好像點(x,y)在面上的移動,也即是前後左右的線性變化,變化量可以表示為[x1, y1]。
三維空間上的點的變化,好像點(x,y,z)在體上的移動,也即是前後上下左右的線性變化,變化量可以表示為[x1, y1, z1]。
N維空間上的點的變化,好像點(x,y,z,.....n)在體上的移動,也即是2n個方向的線性變化,變化量可以表示為[x1, y1, z1,……n1]。
3、矩陣是圖形到圖形的變化量,而圖形可以是一維的線、二維的面、三維的體,等等。
3.1、一維的線的變化,我們知道兩點可以表示一線段,則需要用兩個向量組成的矩陣對兩點進行變化,就能達到對線段的變化。
3.2、二維的面的變化,我們知道三點可以表示一個三角形,四點可以表示一個四邊形,五點可以表示一個五邊形,等等。就拿三角形來說,需要用三個向量組成的矩陣對三點進行變化,就能達到對三角形的變化。
3.3、三維的體的變化,我們知道4點可以表示一個三角堆,5點可以表示四棱錐、6點可以表示一個三棱柱,等等。就拿三角堆來說,需要用四個向量組成的矩陣來對四個頂點進行變化,就能達到對三角堆的變化。
4、三階張量可以表示圖像的變化量,圖像與圖形的不同是圖像的點除了有坐标,還具有顔色特性,如RGB、RGBA、YCbcr等表示的顔色。拿RGB的圖像來說,它的變化量包括坐标和色值變化。圖像坐标的變化相當于圖形的變化,即是一個矩陣的變化。色值變化也就是RGB在顔色空間中的一個點變化,也是一個矩陣的變化,圖像變化有兩個矩陣變化,三階張量是矩陣的組合,則可以用三階張量來表示圖像的變化量,如tensor[3,5,5]表示3顔色通道的5*5大小圖形的變化量。
5、四階張量在TensorFlow的神經卷積網絡中,經常用到。下面舉個例子。
5.1、輸入張量格式:[batch, in_height, in_width, in_channels]
5.2、卷積核格式:[filter_height, filter_width, in_channels, out_channels]
5.3、我們來對輸入圖檔進行卷積得到特征圖檔。
一張5通道的5*5的輸入圖檔:input = [1, 5, 5, 5];
5輸入通道、7輸出通道的3*3大小的卷積核:filter = [3, 3, 5, 7];
strides=[1,1,1,1]表示各個方向步長為1;
padding=“SAME”表示卷積核周遊到輸入圖檔的每個像素,得到的特征圖檔與輸入圖檔是一樣大小。
tf.shape(tf.nn.conv2d(input, filter, strides=[1,1,1,1], padding=“SAME”));
卷積結果是:[1, 5, 5, 7]
5.4、用圖形來表示上面的卷積過程。