最近在学习Keras的使用,在此整理一下相关内容。方式方法上,我想通过使用Keras构建多种常见神经网络来逐步理解Keras,这样的话,通过常见、容易理解的神经网络,一步步深入Keras使用。子曰:由也升堂矣,未入于室也。
BP神经网络使用误差逆向传播算法训练的多层前馈网络,是目前应用非常广泛的神经网络。按照Keras的角度,神经网络的构建可以分为两部分:建立神经网络模型和训练神经网络模型。对于BP神经网络,网络模型为多层前馈网络,cost function采用平方和误差函数,训练采用梯度下降法。
首先,通过Keras构建前馈神经网络,这部分主要采用Dense层来完成。Dense层是最简单,也是最常用的全连接网路层。
初步了解Keras,推荐此网站Keras新手指南。
Dense层基本参数:
- units:层输出维度
- activation:激活函数
- init:权值初始化方法
- input_shape输入张量(nb_samples, input_dim)
综上,通过Dense层构建前馈神经网络的方法如下:
#使用层次模型
model = Sequential()
#输入层与第一个隐层同时建立,输入层13维,第一个隐层有10个神经元,激活函数使用sigmoid
model.add(Dense(10, activation='sigmoid', input_dim=13))
#输出层有3个神经元,激活函数使用softmax
model.add((Dense(3, activation='softmax'))
这样我们就构建了基本的前馈神经网络,但是进行编译,也就是对学习过程进行配置。编译一般需要设置3个参数:
- 优化器optimizer:神经网络的学习方法,例如SGD随机梯度下降法。
- 损失函数loss:神经网络训练时试图最小化的目标函数,例如MSE误差平方和。
- 评价指标
综上,通过前馈神经网络编译设置如下:
#设置SGD随机最速下降法的参数
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
#设置优化器、损失函数和评价指标
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
另外,构建好神经网络后可以通过model.summary()获取模型详细信息。之后,可以通过model.fit()实现模型训练。
#设置训练集,epochs训练轮数,batch_size梯度下降每个批的个数,validation_data设置验证集
model.fit(train_x_scaled, y_train, epochs=20, batch_size=10,validation_data=(test_x_scaled, y_test))
训练完成之后,就可以验证模型在测试集上的误差。
score = model.evaluate(test_x_scaled, y_test, batch_size=10)
完整的程序和数据:下载
欢迎访问我的博客monte3card's blog