李巨集毅機器學習 P15 “Hello world” of deep learning 筆記
我們今天使用Keras來寫一個deep learning model。
tensorflow實際上是一個微分器,它的功能比較強大,但同時也不太好學。因此我們學Keras,相對容易,也有足夠的靈活性。
李教授開了一個玩笑:
下面我們來寫一個最簡單的deep learning model。
即用keras實現mnist手寫體數字識別。(識別手寫體的數字0-9)
keras可以直接下載這個資料集。
step1:define a function
step2:決定一個function的好壞。
step3:挑選一個最好的function。
x_train和y_train的樣子:
實際訓練時我們不是用所有的樣本,而是用一個mini-batch大小的隨機的樣本來訓練。
如果mini-batch*iteration=樣本的總大小,我們就將這iteration次使用mini-batch訓練的過程叫做one epoch。
batch_size即mini-batch的大小。nb_epoch即epoch的次數。
為什麼每次訓練只用mini-batch個樣本?主要是為了提升速度。
batch_size不一樣時,一個epoch需要的時間不同。
可以看到batch_size等於1時,完成一次epoch的時間是batch_size=10時的10倍,而且batch_size=10時,loss值下降更加穩定,不容易出現震盪。
另外,batch_size太大時的效能表現也不太好,並且更新一次權重需要很長的時間。同時,有一定大小的batch_size可以保證不會因為隨機性太強容易走到某個小的local minima位置上去。
矩陣運算時的情況:
對於上面這個網路:
對GPU來說,讓它做上述兩個運算,所用的時間幾乎是一樣的,在矩陣相乘中的每一個元素,都是可以並行運算的,所以上面用的時間會變成下面的兩倍,所以GPU+mini-batch會使效率大大提升。
在每個epoch時的minibatch應隨機地取保證每次都不一樣。
載入和儲存模型: