笔记|李宏毅老师机器学习课程,视频15Keras Demo
《学习笔记》专栏·第15篇
文 | MLer
1521字 | 5分钟阅读
【数据科学与人工智能】开通了机器学习群,大家可以相互学习和交流。请扫描下方二维码,备注:姓名-ML,添加我为好友,诚邀你入群,一起进步。
感谢李宏毅老师的分享,他的课程帮助我更好地学习、理解和应用机器学习。李老师的网站:http://speech.ee.ntu.edu.tw/~tlkagk/index.html。这个学习笔记是根据李老师2017年秋季机器学习课程的视频和讲义做的记录和总结。因为这个视频是在Youtube上面,有些朋友可能无法观看,我把它搬运下来放在云盘上面,大家点击阅读原文,就可以直接在手机随时随地观看了。再次,感谢李老师的付出和贡献。
这门课,共有36个视频,每个视频播放的时间不一。我按着视频播放的顺序,观看,聆听和学习,并结合讲义,做学习笔记。我做学习笔记目的有三:
1 帮助自己学习和理解机器学习
2 记录机器学习的重要知识、方法、原理和思想
3 为传播机器学习做点事情
视频15:Keras Demo
一、Keras实现深度学习的Demo
李老师现场演示如何利用Keras2.0实现深度学习。
直接上代码了
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 注意事项如下:
34 1、batch_size=100,epochs=20为宜,batch_size过大会导致loss下降曲线过于平滑而卡在local minima、saddle point或plateau处,batch_size过小会导致update次数过多,运算量太大,速度缓慢,但可以带来一定程度的准确率提高
35 2、hidden layer数量不要太多,不然可能会发生vanishing gradient(梯度消失),一般两到三层为宜
36 3、如果layer数量太多,则千万不要使用sigmoid等缩减input影响的激活函数,应当选择ReLU、Maxout等近似线性的activation function(layer数量不多也应该选这两个)
37 4、每一个hidden layer所包含的neuron数量,五六百为宜
38 5、对于分类问题,loss function一定要使用cross entropy(categorical_crossentropy),而不是mean square error(mse)
39 6、优化器optimizer一般选择adam,它综合了RMSProp和Momentum,同时考虑了过去的gradient、现在的gradient,以及上一次的惯性
40 7、如果testing data上准确率很低,training data上准确率比较高,可以考虑使用dropout,Keras的使用方式是在每一层hidden layer的后面加上一句model.add(Dropout(0.5)),其中0.5这个参数你自己定;注意,加了dropout之后在training set上的准确率会降低,但是在testing set上的准确率会提高,这是正常的
41 8、如果input是图片的pixel,注意对灰度值进行归一化,即除以255,使之处于0~1之间
42 9、最后的output最好同时输出在training set和testing set上的准确率,以便于对症下药
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里面或者一个Py文件,然后运行查看对应的结果。
更多有趣的内容,请点击阅读原文,观看视频。
朋友们,在学习中有什么问题或者想法,请加入机器学习群,大家一起讨论,共同进步。
每周一书
课程视频点击
↓↓↓
评论