筆記|李宏毅老師機(jī)器學(xué)習(xí)課程,視頻15Keras Demo
《學(xué)習(xí)筆記》專(zhuān)欄·第15篇
文 | MLer
1521字 | 5分鐘閱讀
【數(shù)據(jù)科學(xué)與人工智能】開(kāi)通了機(jī)器學(xué)習(xí)群,大家可以相互學(xué)習(xí)和交流。請(qǐng)掃描下方二維碼,備注:姓名-ML,添加我為好友,誠(chéng)邀你入群,一起進(jìn)步。
感謝李宏毅老師的分享,他的課程幫助我更好地學(xué)習(xí)、理解和應(yīng)用機(jī)器學(xué)習(xí)。李老師的網(wǎng)站:http://speech.ee.ntu.edu.tw/~tlkagk/index.html。這個(gè)學(xué)習(xí)筆記是根據(jù)李老師2017年秋季機(jī)器學(xué)習(xí)課程的視頻和講義做的記錄和總結(jié)。因?yàn)檫@個(gè)視頻是在Youtube上面,有些朋友可能無(wú)法觀(guān)看,我把它搬運(yùn)下來(lái)放在云盤(pán)上面,大家點(diǎn)擊閱讀原文,就可以直接在手機(jī)隨時(shí)隨地觀(guān)看了。再次,感謝李老師的付出和貢獻(xiàn)。
這門(mén)課,共有36個(gè)視頻,每個(gè)視頻播放的時(shí)間不一。我按著視頻播放的順序,觀(guān)看,聆聽(tīng)和學(xué)習(xí),并結(jié)合講義,做學(xué)習(xí)筆記。我做學(xué)習(xí)筆記目的有三:
1 幫助自己學(xué)習(xí)和理解機(jī)器學(xué)習(xí)
2 記錄機(jī)器學(xué)習(xí)的重要知識(shí)、方法、原理和思想
3 為傳播機(jī)器學(xué)習(xí)做點(diǎn)事情
視頻15:Keras Demo
一、Keras實(shí)現(xiàn)深度學(xué)習(xí)的Demo
李老師現(xiàn)場(chǎng)演示如何利用Keras2.0實(shí)現(xiàn)深度學(xué)習(xí)。
直接上代碼了
1import numpy as np
2from keras.models import Sequential
3from keras.layers.core import Dense, Dropout, Activation
4from keras.layers import Conv2D, MaxPooling2D, Flatten
5from keras.optimizers import SGD, Adam
6from keras.utils import np_utils
7from keras.datasets import mnist
8
9
10def load_data(): # categorical_crossentropy
11 (x_train, y_train), (x_test, y_test) = mnist.load_data()
12 number = 10000
13 x_train = x_train[0:number]
14 y_train = y_train[0:number]
15 x_train = x_train.reshape(number, 28 * 28)
16 x_test = x_test.reshape(x_test.shape[0], 28 * 28)
17 x_train = x_train.astype('float32')
18 x_test = x_test.astype('float32')
19 # convert class vectors to binary class matrices
20 y_train = np_utils.to_categorical(y_train, 10)
21 y_test = np_utils.to_categorical(y_test, 10)
22 x_train = x_train
23 x_test = x_test
24 x_test = np.random.normal(x_test) # 加噪聲
25 x_train = x_train / 255
26 x_test = x_test / 255
27
28 return (x_train, y_train), (x_test, y_test)
29
30
31if __name__ == '__main__':
32 '''
33 注意事項(xiàng)如下:
34 1、batch_size=100,epochs=20為宜,batch_size過(guò)大會(huì)導(dǎo)致loss下降曲線(xiàn)過(guò)于平滑而卡在local minima、saddle point或plateau處,batch_size過(guò)小會(huì)導(dǎo)致update次數(shù)過(guò)多,運(yùn)算量太大,速度緩慢,但可以帶來(lái)一定程度的準(zhǔn)確率提高
35 2、hidden layer數(shù)量不要太多,不然可能會(huì)發(fā)生vanishing gradient(梯度消失),一般兩到三層為宜
36 3、如果layer數(shù)量太多,則千萬(wàn)不要使用sigmoid等縮減input影響的激活函數(shù),應(yīng)當(dāng)選擇ReLU、Maxout等近似線(xiàn)性的activation function(layer數(shù)量不多也應(yīng)該選這兩個(gè))
37 4、每一個(gè)hidden layer所包含的neuron數(shù)量,五六百為宜
38 5、對(duì)于分類(lèi)問(wèn)題,loss function一定要使用cross entropy(categorical_crossentropy),而不是mean square error(mse)
39 6、優(yōu)化器optimizer一般選擇adam,它綜合了RMSProp和Momentum,同時(shí)考慮了過(guò)去的gradient、現(xiàn)在的gradient,以及上一次的慣性
40 7、如果testing data上準(zhǔn)確率很低,training data上準(zhǔn)確率比較高,可以考慮使用dropout,Keras的使用方式是在每一層hidden layer的后面加上一句model.add(Dropout(0.5)),其中0.5這個(gè)參數(shù)你自己定;注意,加了dropout之后在training set上的準(zhǔn)確率會(huì)降低,但是在testing set上的準(zhǔn)確率會(huì)提高,這是正常的
41 8、如果input是圖片的pixel,注意對(duì)灰度值進(jìn)行歸一化,即除以255,使之處于0~1之間
42 9、最后的output最好同時(shí)輸出在training set和testing set上的準(zhǔn)確率,以便于對(duì)癥下藥
43 '''
44 # load training data and testing data
45 (x_train, y_train), (x_test, y_test) = load_data()
46
47 # define network structure
48 model = Sequential()
49
50 model.add(Dense(input_dim=28 * 28, units=500, activation='relu'))
51 # model.add(Dropout(0.5))
52 model.add(Dense(units=500, activation='relu'))
53 # model.add(Dropout(0.5))
54 model.add(Dense(units=10, activation='softmax'))
55
56 # set configurations
57 model.compile(loss='categorical_crossentropy',
58 optimizer='adam', metrics=['accuracy'])
59
60 # train model
61 model.fit(x_train, y_train, batch_size=100, epochs=20)
62
63 # evaluate the model and output the accuracy
64 result_train = model.evaluate(x_train, y_train)
65 result_test = model.evaluate(x_test, y_test)
66 print('Train Acc:', result_train[1])
67 print('Test Acc:', result_test[1])
你可以把上述代碼放在Notebook里面或者一個(gè)Py文件,然后運(yùn)行查看對(duì)應(yīng)的結(jié)果。
更多有趣的內(nèi)容,請(qǐng)點(diǎn)擊閱讀原文,觀(guān)看視頻。
朋友們,在學(xué)習(xí)中有什么問(wèn)題或者想法,請(qǐng)加入機(jī)器學(xué)習(xí)群,大家一起討論,共同進(jìn)步。
每周一書(shū)
5數(shù)據(jù)科學(xué)導(dǎo)論:Python語(yǔ)言實(shí)現(xiàn)
課程視頻點(diǎn)擊
↓↓↓
