1. 程式人生 > >李巨集毅機器學習 P15 “Hello world” of deep learning 筆記

李巨集毅機器學習 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應隨機地取保證每次都不一樣。

載入和儲存模型: