前文了解了 keras 的重要模块后,我们就可以使用 keras 了:
1,构造数据
第一步,我们需要根据模型 fit(训练)时需要的数据格式来构造数据的 shape,用 numpy 构造两个矩阵:
一个是数据矩阵,一个是标签矩阵,我们举个例子
data=np.random.random((1000,784))
labels=np.random.randint(2,size=(1000,1))
1
2
通过 numpy 的 random 生成随机矩阵,数据矩阵是 1000 行 784 列的矩阵,标签矩阵是 1000 行 1 列的句子,所以数据矩阵的一行就是一个样本,这个样本是 784 维的
2,构造模型
第二步,我们来构造一个神经网络模型
用泛型模型举例:
两种构造 model 的方法
model = Sequential([ Dense(32, input_dim=784), Activation('relu'), Dense(10), Activation('softmax'), ])
1
或
model = Sequential()
model.add(Dense(32, input_dim=784)) model.add(Activation('relu'))
1
2
在这一步中可以 add 多个层,也可以 merge 合并两个模型
3,编译模型
第三步,我们编译上一步构造好的模型,并指定一些模型的参数,比如目标函数,优化器等
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
1
compile 方法的三个参数:
optimizer(优化器),loss(目标函数或损失函数),metrics(评估模型的指标)
具体见上一篇文章
4,训练模型
第四步,传入要训练的数据和标签,并指定训练的一些参数,然后进行模型训练
fit(self, x, y, batch_size=32, nb_epoch=10, verbose=1, callbacks=[], validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None)
1
fit 方法参数解析:
verbose:训练时显示实时信息,0 表示不显示数据,1 表示显示进度条,2 表示用只显示一个数据
validation_split:0.2 表示 20% 作为数据的验证集
validation_data:形式为(X,y)的 tuple,是指定的验证集.此参数将覆盖 validation_spilt.
class_weight:字典,将不同的类别映射为不同的权值,该参数用来在训练过程中调整损失函数(只能用于训练)
sample_weight:权值的 numpy array,用于在训练时调整损失函数(仅用于训练).可以传递一个 1D 的与样本等长的向量用于对样本进行 1 对 1 的加权,或者在面对时序数据时,传递一个的形式为(samples,sequence_length)的矩阵来为每个时间步上的样本赋不同的权.这种情况下请确定在编译模型时添加了 sample_weight_mode='temporal'.
(以上两个参数据说分别为类别权重和样本权重,类别权重没太理解,样本权重貌似就是比如这个样本对分类贡献大,就增加他的权重,有点像 TF-IDF,是否是一种注意力机制呢?)
x:输入数据.如果模型只有一个输入,那么 x 的类型是 numpy array,如果模型有多个输入,那么 x 的类型应当为 list,list 的元素是对应于各个输入的 numpy array
y:标签,numpy array
batch_size:整数,指定进行梯度下降时每个 batch 包含的样本数.训练时一个 batch 的样本会被计算一次梯度下降,使目标函数优化一步.
nb_epoch:整数,训练的轮数,训练数据将会被遍历 nb_epoch 次.Keras 中 nb 开头的变量均为 "number of" 的意思
5,测试数据
第五步,用测试数据测试已经训练好的模型,并可以获得测试结果,从而对模型进行评估.
evaluate:
evaluate(self, x, y, batch_size=32, verbose=1, sample_weight=None)
1
本函数返回一个测试误差的标量值(如果模型没有其他评价指标),或一个标量的 list(如果模型还有其他的评价指标)
predict
predict(self, x, batch_size=32, verbose=0)
1
函数的返回值是预测值的 numpy array
predict_classes
predict_classes(self, x, batch_size=32, verbose=1)
1
2
本函数按 batch 产生输入数据的类别预测结果
函数的返回值是类别预测结果的 numpy array 或 numpy
还有其他评估指标,具体见:
http://keras-cn.readthedocs.io/en/latest/models/sequential/
以上就是 keras 编程常用的五个步骤
6,保存与读取模型
将模型保存为json
json_string = model.to_json()
将模型保存为yaml
yaml_string = model.to_yaml()
从保存的json中加载模型
from keras.modelsimport model_from_json
model = model_from_json(json_string)
从保存的yaml中加载模型
model =model_from_yaml(yaml_string)
1
2
3
4
5
6
7
8
9
7,保存与加载权重数据
model.save_weights('my_model_weights.h5')
model.load_weights('my_model_weights.h5')
1
2
以上是根据 keras 中文文档进行总结与修改的,主要参考
http://keras-cn.readthedocs.io/en/latest
来源: http://www.taocms.org/1136.html