Keras是一个高级神经网络搭建工具,比TensorFlow更加高级,当然灵活性也就没那么高。Keras给出了各种深度学习结构的基础部件,我们只需要定义每一个部件的参数,全部连起来即可,很多细节都可以跳过,从而使得构造网络十分简单快速,不容易出错。
Keras有Functional模型和Sequential模型,前者要更加灵活,后者编译速度快,Sequential是函数模型的一种特殊情况。
http://keras-cn.readthedocs.io/en/latest/for_beginners/concepts/
很简单,例子如下:
from keras.layers import Dropout, Flatten, Dense
from keras.models import Sequentialmodel.summary()
网络结构输入如下:
图中可以看到,每一层的OutputShape都有None,这就是batch。参数个数可以参考a=wx+b公式计算w和b的参数个数:
544 = 32*16+32
from keras import optimizers
model.compile(loss='categorical_crossentropy', optimizer=optimizers.Adam(lr=0.1, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0), metrics=['accuracy'])
由于输出层有多个输出,所以使用了多类别的交叉熵损失函数,优化器使用Adam,需要指定学习率,Momentum参数等,最后metrics使用准确率。
由于x1、x2、x3有很多交叉部分,所以准确率估计不会是100%,用来试试算法效果
from keras.callbacks import ModelCheckpoint
checkpointer = ModelCheckpoint(filepath='best.hdf5',
verbose=1, save_best_only=True)
his=model.fit(x, y,
# validation_data=(vx, vy),
epochs=20, batch_size=10, callbacks=[checkpointer], verbose=1)
这里保存最好的一个结果,就是损失最小的那一次的模型,validation_data没有设置,设置了后每一个epoch会验证一次模型准确率,当然模型训练数据的acc每一个batch都会计算
最后稳定在80%多的准确率,如果将x搞得更加有区分度,准确率可以到100%。这里有个提示,没有validation_data不会保存最优模型。好吧。。