用keras框架训练图像分类模型----学习笔记

学习opencv 停车场车位识别,用到神经网络模型训练,使用keras框架。
记下一篇学习笔记。
keras中文文档
keras 官方文档中总结了keras框架的几个指导原则:

  1. 用户友好
  2. 模块化(在我们构建自己的神经网络时候, 特别是神经网络层、损失函数、优化器、初始化方法、激活函数、正则化方法,它们都是可以结合起来构建新模型的模块。)
  3. 易于扩展
  4. 基于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_diminput_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'])

所有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)。
参数解释考官方文档

发布了10 篇原创文章 · 获赞 0 · 访问量 212

猜你喜欢

转载自blog.csdn.net/weixin_43227526/article/details/105160772