1、符號計算
Keras的底層庫使用Theano或TensorFlow,這兩個庫也稱為Keras的后端。無論是Theano還是TensorFlow,都是一個“符號式”的庫。
符號主義的計算首先定義各種變量,然后建立一個“計算圖”,計算圖規定了各個變量之間的計算關系。建立好的計算圖需要編譯以確定其內部細節,然而,此時的計算圖還是一個“空殼子”,里面沒有任何實際的數據,只有當你把需要運算的輸入放進去后,才能在整個模型中形成數據流,從而形成輸出值。
2、張量
規模最小的張量是0階張量,即標量,也就是一個數。當我們把一些數有序的排列起來,就形成了1階張量,也就是一個向量如果我們繼續把一組向量有序的排列起來,就形成了2階張量,也就是一個矩陣把矩陣摞起來,就是3階張量,我們可以稱為一個立方體,具有3個顏色通道的彩色圖片就是一個這樣的立方體把立方體摞起來,好吧這次我們真的沒有給它起別名了,就叫4階張量了,不要去試圖想像4階張量是什么樣子,它就是個數學上的概念。
張量的階數有時候也稱為維度,或者軸,軸這個詞翻譯自英文axis。譬如一個矩陣[[1,2],[3,4]],是一個2階張量,有兩個維度或軸,沿着第0個軸(為了與python的計數方式一致,本文檔維度和軸從0算起)你看到的是[1,2],[3,4]兩個向量,沿着第1個軸你看到的是[1,3],[2,4]兩個向量。
3、data_format
在如何表示一組彩色圖片的問題上,Theano和TensorFlow發生了分歧,’th’模式,也即Theano模式會把100張RGB三通道的16×32(高為16寬為32)彩色圖表示為下面這種形式(100,3,16,32),Caffe采取的也是這種方式。第0個維度是樣本維,代表樣本的數目,第1個維度是通道維,代表顏色通道數。后面兩個就是高和寬了。這種theano風格的數據組織方法,海外實習稱為“channels_first”,即通道維靠前。
而TensorFlow,的表達形式是(100,16,32,3),即把通道維放在了最后,這種數據組織方式稱為“channels_last”。
4、函數式模型
一種叫Sequential,稱為序貫模型,也就是單輸入單輸出,一條路通到底,層與層之間只有相鄰關系,跨層連接統統沒有。這種模型編譯速度快,操作上也比較簡單。
另一種函數式模型稱作Functional,但它的類名是Model,因此我們有時候也用Model來代表函數式模型。雅思托福換算函數式模型是最廣泛的一類模型,序貫模型(Sequential)只是它的一種特殊情況。
5、batch
深度學習的優化算法,說白了就是梯度下降。每次的參數更新有兩種方式。
第一種,遍歷全部數據集算一次損失函數,然后算函數對各個參數的梯度,更新梯度。這種方法每更新一次參數都要把數據集里的所有樣本都看一遍,計算量開銷大,計算速度慢,不支持在線學習,這稱為Batch gradient descent,批梯度下降。
另一種,每隨機看一組數據就算一下損失函數,然后求梯度更新參數,這個稱為隨機梯度下降,stochastic gradient descent。這個方法速度比較快,但是收斂性能不太好,可能在最優點附近晃來晃去,hit不到最優點。兩次參數的更新也有可能互相抵消掉,造成目標函數震盪的比較劇烈。
為了克服兩種方法的缺點,現在一般采用的是一種折中手段,mini-batch gradient decent,小批的梯度下降,這種方法把數據分為若干個批,按批來更新參數,這樣,一個批中的一組數據共同決定了本次梯度的方向,下降起來就不容易跑偏,減少了隨機性。另一方面因為批的樣本數與整個數據集相比小了很多,計算量也不是很大。
基本上現在的梯度下降都是基於mini-batch的,所以Keras的模塊中經常會出現batch_size,就是指這個。
順便說一句,Keras中用的優化器SGD是stochastic gradient descent的縮寫,但不代表是一個樣本就更新一回,還是基於mini-batch的。
6、epochs
epochs指的就是訓練過程中數據將被“輪”多少次。