Keras笔记(一)一些基本概念
1. tensor 張量
張量,或tensor。
規(guī)模最小的張量是0階張量,即標(biāo)量,也就是一個(gè)數(shù)。
當(dāng)我們把一些數(shù)有序的排列起來(lái),就形成了1階張量,也就是一個(gè)向量
如果我們繼續(xù)把一組向量有序的排列起來(lái),就形成了2階張量,也就是一個(gè)矩陣
把矩陣摞起來(lái),就是3階張量,我們可以稱為一個(gè)立方體,具有3個(gè)顏色通道的彩色圖片就是一個(gè)這樣的立方體。
張量的階數(shù)有時(shí)候也稱為維度,或者軸,軸這個(gè)詞翻譯自英文axis。
譬如一個(gè)矩陣[[1,2],[3,4]],是一個(gè)2階張量,有兩個(gè)維度或軸,沿著第0個(gè)軸(為了與python的計(jì)數(shù)方式一致,本文檔維度和軸從0算起)你看到的是[1,2],[3,4]兩個(gè)向量,沿著第1個(gè)軸你看到的是[1,3],[2,4]兩個(gè)向量。
要理解“沿著某個(gè)軸”是什么意思,不妨試著運(yùn)行一下下面的代碼:
import numpy as npa = np.array([[1,2],[3,4]]) sum0 = np.sum(a, axis=0) sum1 = np.sum(a, axis=1)print sum0 print sum1 2.data_format這是一個(gè)無(wú)可奈何的問(wèn)題,在如何表示一組彩色圖片的問(wèn)題上,Theano和TensorFlow發(fā)生了分歧,'th'模式,也即Theano模式會(huì)把100張RGB三通道的16×32(高為16寬為32)彩色圖表示為下面這種形式(100,3,16,32),Caffe采取的也是這種方式。第0個(gè)維度是樣本維,代表樣本的數(shù)目,第1個(gè)維度是通道維,代表顏色通道數(shù)。后面兩個(gè)就是高和寬了。這種theano風(fēng)格的數(shù)據(jù)組織方法,稱為“channels_first”,即通道維靠前。
而TensorFlow,的表達(dá)形式是(100,16,32,3),即把通道維放在了最后,這種數(shù)據(jù)組織方式稱為“channels_last”。
Keras默認(rèn)的數(shù)據(jù)組織形式在~/.keras/keras.json中規(guī)定,可查看該文件的image_data_format一項(xiàng)查看,也可在代碼中通過(guò)K.image_data_format()函數(shù)返回,請(qǐng)?jiān)诰W(wǎng)絡(luò)的訓(xùn)練和測(cè)試中保持維度順序一致。
3. 函數(shù)式模型
4. batch
深度學(xué)習(xí)的優(yōu)化算法,說(shuō)白了就是梯度下降。每次的參數(shù)更新有兩種方式。
第一種,遍歷全部數(shù)據(jù)集算一次損失函數(shù),然后算函數(shù)對(duì)各個(gè)參數(shù)的梯度,更新梯度。這種方法每更新一次參數(shù)都要把數(shù)據(jù)集里的所有樣本都看一遍,計(jì)算量開(kāi)銷大,計(jì)算速度慢,不支持在線學(xué)習(xí),這稱為Batch gradient descent,批梯度下降。
另一種,每看一個(gè)數(shù)據(jù)就算一下?lián)p失函數(shù),然后求梯度更新參數(shù),這個(gè)稱為隨機(jī)梯度下降,stochastic gradient descent。這個(gè)方法速度比較快,但是收斂性能不太好,可能在最優(yōu)點(diǎn)附近晃來(lái)晃去,hit不到最優(yōu)點(diǎn)。兩次參數(shù)的更新也有可能互相抵消掉,造成目標(biāo)函數(shù)震蕩的比較劇烈。
為了克服兩種方法的缺點(diǎn),現(xiàn)在一般采用的是一種折中手段,mini-batch gradient decent,小批的梯度下降,這種方法把數(shù)據(jù)分為若干個(gè)批,按批來(lái)更新參數(shù),這樣,一個(gè)批中的一組數(shù)據(jù)共同決定了本次梯度的方向,下降起來(lái)就不容易跑偏,減少了隨機(jī)性。另一方面因?yàn)榕臉颖緮?shù)與整個(gè)數(shù)據(jù)集相比小了很多,計(jì)算量也不是很大。
基本上現(xiàn)在的梯度下降都是基于mini-batch的,所以Keras的模塊中經(jīng)常會(huì)出現(xiàn)batch_size,就是指這個(gè)。
順便說(shuō)一句,Keras中用的優(yōu)化器SGD是stochastic gradient descent的縮寫,但不代表是一個(gè)樣本就更新一回,還是基于mini-batch的。
5. epochsepochs指的就是訓(xùn)練過(guò)程中數(shù)據(jù)將被“輪”多少次,就這樣。
6.Dense層
Dense就是常用的全連接層,所實(shí)現(xiàn)的運(yùn)算是output = activation(dot(input, kernel)+bias)。其中activation是逐元素計(jì)算的激活函數(shù),kernel是本層的權(quán)值矩陣,bias為偏置向量,只有當(dāng)use_bias=True才會(huì)添加。
總結(jié)
以上是生活随笔為你收集整理的Keras笔记(一)一些基本概念的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Scala入门到精通——第十七节 类型参
- 下一篇: Scala入门到精通——第十八节 隐式转