虽然Scikit-Learn足够强大,但是它并没有包含一种强大的模型—人工神经网络。人工神经网络是功能相当强大的、但是原理又相当简单的模型,在语言处理、图像识别等领域有着重要的作用。近年来逐渐火起来的“深度学习”算法,本质上也就是一种神经网络,可见在Python中实现神经网络是非常必要的。
本书用Keras库来搭建神经网络。事实上,Keras并非简单的神经网络库,而是一个基于Theano的强大的深度学习库,利用它不仅仅可以搭建普通的神经网络,还可以搭建各种深度学习模型,如自编码器、循环神经网络、递归神经网络、卷积神经网络等。由于它是基于Theano的,因此速度也相当快。
有必要介绍一下Theano,它也是Python的一个库,它是由深度学习专家Yoshua Bengio带领的实验室开发出来的,用来定义、优化和高效地解决多维数组数据对应数学表达式的模拟估计问题。它具有高效地实现符号分解、高度优化的速度和稳定性等特点,最重要的是它还实现了GPU加速,使得密集型数据的处理速度是CPU的数十倍。
用Theano就可以搭建起高效的神经网络模型,但是对于普通读者来说门槛还是相当高的,Keras正是为此而生,它大大简化了搭建各种神经网络模型的步骤,允许普通用户轻松地搭建并求解具有几百个输入节点的深层神经网络,而且定制的自由度非常大,甚至可能惊呼:搭建神经网络可以如此简单!
(1)安装
安装Keras之前首先需要安装Numpy、Scipy和Theano。安装Theano先要准备一个C++编译器,这在Linux下是自带的。因此,在Linux下安装Theano和Keras非常简单,只需要下载源代码,然后用python setup.py install安装就行了,具体可以参考官方文档。
可是在Windows下就没有那么简单了,因为它没有现成的编译环境。一般而言是先安装MinGW(Windows下的GCC和G++),然后再安装Theano(提前装好Numpy等依赖库),最后安装Keras。如果要实现GPU加速,还需要安装和配置CUDA(天下没有免费的午餐,想要速度、易用两不误,那么就得花点心思)。限于篇幅,本书不详细介绍在Windows下Theano和Keras的安装配置方法。
值得一提的是,在Windows下Keras的速度会大打折扣,因此,想要在神经网络和深度学习方面进行深入研究的读者,请在Linux下搭建相应的环境。
参考链接:
http://deeplearning.net/software/theano/install.html#install。
https://github.com/fchollet/keras。
(2)使用
用Keras搭建神经网络模型的过程相当简洁,也相当直观,就像搭积木一般。通过短短几十行代码,我们就可以搭建起一个非常强大的神经网络模型,甚至是深度学习模型。简单搭建一个MLP(多层感知器),如下:
# -*- coding: utf-8 -*- from keras.models import Sequential from keras.layers.core import Dense, Dropout, Activation from keras.optimizers import SGD model = Sequential() #模型初始化 model.add(Dense(20, 64)) #添加输入层(20节点)、第一隐藏层(64节点)的连接 model.add(Activation('tanh')) #第一隐藏层用tanh作为激活函数 model.add(Dropout(0.5)) #使用Dropout防止过拟合 model.add(Dense(64, 64)) #添加第一隐藏层(64节点)、第二隐藏层(64节点)的连接 model.add(Activation('tanh')) #第二隐藏层用tanh作为激活函数 model.add(Dropout(0.5)) #使用Dropout防止过拟合 model.add(Dense(64, 1)) #添加第二隐藏层(64节点)、输出层(1节点)的连接 model.add(Activation('sigmoid')) #输出层用sigmoid作为激活函数 sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True) #定义求解算法 model.compile(loss='mean_squared_error', optimizer=sgd) #编译生成模型,损失函数为平均误差平方和 model.fit(X_train, y_train, nb_epoch=20, batch_size=16) #训练模型 score = model.evaluate(X_test, y_test, batch_size=16) #测试模型
要注意的是,Keras的预测函数与Scikit-Learn有所差别,Keras用model.predict()方法给出概率,model.predict_classes()方法给出分类结果。
参考链接:
http://radimrehurek.com/gensim/。
http://www.52nlp.cn/如何计算两个文档的相似度二。