1. 为何要用Keras
如今在这个深度学习大火的时候,第三方工具也层出不穷,比较出名的有Tensorflow,Caffe,Theano,MXNet,在如此多的第三方框架中频繁的更换无疑是很低效的,只要你能够好好掌握好其中一个框架,熟悉其原理,那么之后因为各种要求你想要更换框架也是很容易的。
那么sherlock用的是哪个框架呢?sherlock使用的是Google的开源框架Tensorflow,因为Google开源了tensorflow之后其社区非常活跃,而且版本更新也非常稳定,所以我就选择了这个框架。对于框架之争,在知乎上已经有很多人在撕逼了,这个就好比哪种编程语言好这个问题一样。对于我们来讲,选择一个稳定的框架,好好的学习deep learning才是重中之重,对于哪种框架更好的问题,我们学好之后自然有自己的见解,所以前期切忌在刷知乎听完大神撕逼之后频繁更换框架。
对于Tensorflow的安装,以及CPU和GPU版本,各种系统的安装网上已经有很多人详细的写过攻略了,可以自己去网上搜一搜,很容易就可以安装成功。
那么我们选择了Tensorflow之后,我们就可以愉快的开始我们的深度学习之旅了。去Tensorflow的中文社区,可以看到有一些新手教程,网上也有很多学习材料,推荐看看stanford大学cs224d的课件,http://cs224d.stanford.edu/lectures/CS224d-Lecture7.pdf, 很详细的介绍了tensorflow。然后你就可以写tensorflow的程序了。虽然说tensorflow已经是一个封装好的框架,但是你发现你写一个简单的神经网络也需要很多行才能够写完,这个时候,就有很多的第三方插架来帮助你写网络,也就是说你用tensorflow要写10行,第三方插架帮你封装了一个函数,就是把这10行集合在这个函数里面,那么你用1行,传入相同的参数,就能够达到10行相同的效果,如此简便并且节约时间,可以帮助我们很快的实现我们的想法。
https://keras.io/ 这个就是Keras的官方文档,里面可以查阅所有的函数,并且可以在github上看他的开源代码,非常方便。安装也很简单,打开终端,输入pip install keras 就可以等待安装了。
下面就给一个简单的例子,来看一看Keras到底有多简单。
from keras.models import Sequential
model = Sequential()
引入sequential,这个就是一个空的网络结构,并且这个结构是一个顺序的序列,所以叫Sequential,Keras里面还有一些其他的网络结构。
from keras.layers import Dense, Activation
model.add(Dense(units=64, input_dim=100))
model.add(Activation('relu'))
model.add(Dense(units=10))
model.add(Activation('softmax'))
可以看到加入层很简单,只需要写.add,后面是要加的层的类型。
model.compile(loss='categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy'])
一旦你写好了网络之后,就可以用compile编译整个网络,看参数设置有没有问题
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True))
你也可以自定义其中的优化函数,就像上面这样,'sgd'是Keras已经写好了一些默认参数的优化函数,你可以自己重新定义参数,得到一个优化函数。
model.fit(x_train, y_train, epochs=5, batch_size=32)
这个就像scikit-learn一样训练模型。
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)
这个就是评估训练结果。
classes = model.predict(x_test, batch_size=128)
或者是通过predict进行预测。
看了上面的代码,相信很多熟悉scikit-learn的同学都很亲切,因为确实很简便,跟scikit-learn也有着类似的语法。
通过上面的例子,配置了我们学习深度学习的环境,下次的文章将开始学习CNN。