简介
Keras 是与 TensorFlow 一起使用的更高级别的作为后端的API。
添加层、编译、拟合模型、预测等分别只需添加一行代码,其变量声明、占位符、会话都由API管理。
1. 定义模型
from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
2. 添加层
keras.layers.core.Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
参数 | 含义 |
---|---|
units | 大于0的整数,该层的输出维度 |
activation | 激活函数 |
use_bias | 是否使用偏置项 |
kernel_initializer | 权值初始化方法 |
bias_initializer | 偏置向量初始化方法 |
kernel_regularizer | 权重上的正则项 |
bias_regularizer | 偏置向量上的正则项 |
activity_regularizer | 输出上的正则项 |
kernel_constraints | 权重上的约束项 |
bias_constraints | 偏置上的约束项 |
每个隐藏层由前一层提供输入,只需为第一层指定输入维度
model.add(Dense(32, input_dim=13, activation='relu'))
model.add(10, activation='sigmoid')
3. 选择优化器和损失函数
Model.compile(optimizer, loss, metrics=[], loss_weights=None, sample_weight_mode=None)
参数 | 含义 |
---|---|
optimizer | 优化器:SGD、RMSprop、Adagrad、Adadelta、Adam、Adamax、Nadam |
loss | 目标函数:mean_squared_error或mse、mean_absolute_error或mae、mean_absolute_percentage_error或mape、mean_squared_logarithmic_error或msle、squared_hinge、hinge、binary_crossentropy、categorical_crossentropy、sparse_categorical_crossentrop、kullback_leibler_divergence、poisson、cosine_proximity |
metrics | 列表,评估模型在训练和测试时的性能的指标,典型用法是metrics=[‘accuracy’] |
sample_weight_mode | 如果需按时间步为样本赋权,设为“temporal” |
model.compile(optimizer='adam', loss='mean_squared_error', metrics=['accuracy'])
4. 训练模型
Model.fit(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)
参数 | 含义 |
---|---|
x | 输入数据。1个输入用numpy array,多个输入用list |
y | 标签 |
batch_size | 每批训练批量大小 |
nb_epoch | 迭代次数 |
verbose | 日志显示。0无,1进度条,2每个迭代 |
callbacks | 回调函数,list |
validation_split | 验证集比例,0-1 |
validation_data | 指定验证集,tuple(此参数覆盖validation_spilt) |
shuffle | 是否随机打乱输入样本的顺序 |
class_weight | dict,将不同的类别映射为不同的权值,用于训练中调整损失函数 |
sample_weight | 权值的numpy array,用于训练中调整损失函数。可以传递一个1D的与样本等长的向量用于对样本进行1对1的加权,或者在面对时序数据时,传递一个的形式为(samples,sequence_length)的矩阵来为每个时间步上的样本赋不同的权。这种情况下请确定在编译模型时添加了sample_weight_mode=‘temporal’。 |
model.fit(data, labels, epochs=10, batch_size=32)
5. 训练模型
Model.predict(self, x, batch_size=32, verbose=0)
返回预测值的numpy array
model.predict(test_data, batch_size=10)
6. 保存模型
Model.save(self, filepath, overwrite=True, include_optimizer=True)
返回一个HDF5文件。包含:模型的结构(以便重构该模型)、模型的权重、训练配置(损失函数,优化器等)、优化器的状态(以便于从上次训练中断的地方开始)
model.save('my_model.h5')
7. 加载模型
keras.models.load_model(filepath, custom_objects=None, compile=True)
from keras.models import load_model
model = load_model('my_model.h5')