学习opencv 停车场车位识别,用到神经网络模型训练,使用keras框架。
记下一篇学习笔记。
keras中文文档
keras 官方文档中总结了keras框架的几个指导原则:
- 用户友好
- 模块化(在我们构建自己的神经网络时候, 特别是神经网络层、损失函数、优化器、初始化方法、激活函数、正则化方法,它们都是可以结合起来构建新模型的模块。)
- 易于扩展
- 基于python 实现
keras 的核心数据结构是model,最简单的是顺序模型 Sequential ,
对于更复杂的结构,有 Keras 函数式 API,它允许构建任意的神经网络图。
从简单的顺序结构Sequential开始:
Sequential模型是层的线性堆栈
顺序结构给人一种感觉就是一条线下来,把所有需要的模块罗列下来。
from keras.models import Sequential
model = Sequential()
1 首先指定输入的形状shape
通过Sequential模型的第一层来确定模型中输入数据的shape,只需要在第一层中定义,因为其它层
可以进行自动形状推断。
接着就使用.add()
来堆叠模型。
Dense中参数的含义
参数的含义
from keras.layers import Dense
# units表示该层输出的维度
# activation表示激活函数
# input_dim表示张量的维度
model.add(Dense(units=64, activation='relu', input_dim=100))
model.add(Dense(units=10, activation='softmax'))
1.将input_shape参数传递给第一层。这是一个元组, None表示可以输入任何整数。该参数不包含批次的尺寸。
2.对于二维输入,用input_dim
来制定输入的维度。
3.对于三维输入,则使用参数input_dim
和input_length
4. 若要固定批处理的大小,则使用参数batch_size
, 如果同时传递batch_size=32
和传递input_shape=(6, 8)
,则每一批输入的形状都是(32, 6, 8)
2 编译
指定了数据的shape,在训练模型之前需要通过compile
配置学习过程。
在构建完模型后,使用.compile
来配置学习过程。
from keras import optimizers
# loss表示损失函数
# optimizer表示优化器选择随机梯度下降
# metrics表示评价指标,为准确率
model.compile(loss='categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy'])
- 优化器
optimizer
优化器官方文档
所有keras优化器共有的参数
lr:学习率
clipnorm:梯度裁剪
- 损失函数
loss
官方文档
通常可食用的损失函数包括:
mean_squared_error(均方误差)
keras.losses.mean_squared_error(y_true, y_pred)
mean_absolute_error(平均绝对误差)
keras.losses.mean_absolute_error(y_true, y_pred)
mean_absolute_percentage_error(平均绝对百分比误差)
keras.losses.mean_absolute_percentage_error(y_true, y_pred)
binary_crossentropy(二元交叉熵)
keras.losses.binary_crossentropy(y_true, y_pred, from_logits=False, label_smoothing=0)
损失函数是模型将尝试最小化的目标
其中:
y_true:真实目标的张量。
y_pred:预测目标的张量。
- 性能指标
metrics
官方文档
通常设置成准确率metrics=['accuracy']
binary_accuracy
keras.metrics.binary_accuracy(y_true, y_pred, threshold=0.5)
categorical_accuracy
keras.metrics.categorical_accuracy(y_true, y_pred)
sparse_categorical_accuracy
keras.metrics.sparse_categorical_accuracy(y_true, y_pred)
3 开始训练模型
Keras模型在输入数据和标签的Numpy数组上训练。使用fit
来训练模型。
官方文档
# x_train 和 y_train 是 Numpy 数组 -- 就像在 Scikit-Learn API 中一样。
model.fit(x_train, y_train, epochs=5, batch_size=32)
每次训练固定的epoch
在数据集上进行迭代
fit(x=None, y=None, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None, validation_freq=1, max_queue_size=10, workers=1, use_multiprocessing=False)
参数说明:
x
表示输入数据,
1.Numpy数组(或类似数组的数组)或数组列表(如果模型具有多个输入)。
2.如果模型已命名输入,则dict将输入名称映射到相应的数组/张量。
3.生成器或keras.utils.Sequence返回 (inputs, targets)或(inputs, targets, sample weights)。
4.如果从框架本身输入张量(例如TensorFlow数据张量)返回,则为None(默认)。
y
表示目标数据
batch_size
表示每个梯度更新的样本数, 通常设为一个整数或者None。如果未指定,batch_size则默认为32。
epochs
表示分为几个批次来训练模型,设为一个整数。每个批次都进行数据的迭代。
verbose
表示训练过程的可视化方式,0,1,2,其中1表示进度条、2表示每个训练批次占一行。
4 返回记录
用History.history属性记录连续的epoch训练损失值和度量值以及验证损失值和验证度量值。
5 最后评估模型
evaluate(x=None, y=None, batch_size=None, verbose=1, sample_weight=None, steps=None, callbacks=None, max_queue_size=10, workers=1, use_multiprocessing=False)
返回测试模式下模型的损失值(loss)和指标值(metrics)。
参数解释考官方文档