目录

  • 1 作用
  • 2 API介绍
  • 2.1 Model.compile()
  • 2.2 Model.fit()
  • 2.3 Model.evaluate()
  • 2.4 Model.predict()
  • 2.5 Model.train_on_batch()
  • 2.6 Model.test_on_batch()
  • 2.7 Model.predict_on_batch()
  • 3 使用
  • 3.1 Sequential序贯模型
  • 3.2 Model函数式模型


1 作用

用于搭建和配置神经网络训练的模型,通过Model这个方法可以调用很多API去实现训练神经网络。

2 API介绍

2.1 Model.compile()

配置训练模型

Model.compile(
    optimizer="rmsprop",#优化器
    loss=None,#损失函数的函数名
    metrics=None,#模型在训练和测试期间要评估的指标列表,默认是accuracy
    loss_weights=None,#用于指定标量系数(Python浮点数)以加权不同模型输出的损耗贡献。然后,将由模型最小化的损失值将是所有单个损失的加权总和,并由loss_weights系数加权 。如果是列表,则期望与模型的输出具有1:1映射。如果是字典,则期望将输出名称(字符串)映射到标量系数。
    weighted_metrics=None,#在训练和测试期间要通过sample_weight或class_weight评估和加权的指标列表。
    run_eagerly=None,#默认为False
    steps_per_execution=None,#运行的批处理数,默认为1
)

2.2 Model.fit()

配置训练数据集的相关参数

Model.fit(
    x=None,#输入数据
    y=None,#目标数据
    batch_size=None,#批量大小
    epochs=1,#训练轮数
    verbose=1,#0、1或2。详细模式。0 =静音,1 =进度条,2 =每个epoch输出一行
    callbacks=None,#训练期间要应用的回调列表
    validation_split=0.0,#验证集划分数据集的百分比,在0到1之间,
    validation_data=None,#验证集
    shuffle=True,#是否打乱数据集
    class_weight=None,#用于对损失函数加权(仅在训练过程中)
    sample_weight=None,#训练样本的可选Numpy权重数组,用于加权损失函数(仅在训练过程中)
    initial_epoch=0,#开始训练的epoch(用于恢复以前的训练运行)
    steps_per_epoch=None,#一个epoch完成并开始下一个epoch之前的总步数
    validation_steps=None,#在每个epoch结束时执行验证时,在停止之前要绘制的步骤总数(样本批次)
    validation_batch_size=None,#每个验证批次的样品数量,默认=batch-size
    validation_freq=1,#如果为整数,则指定在执行新的验证运行之前要运行多少个训练epoch
    max_queue_size=10,#生成器队列的最大大小,默认=10
    workers=1,#使用基于进程的线程时,要启动的最大进程数
    use_multiprocessing=False,#是否开启基于进程的线程
)

2.3 Model.evaluate()

返回测试模式下模型的损失值和指标值。分批进行计算

Model.evaluate(
    x=None,#输入数据
    y=None,#目标数据
    batch_size=None,#批量大小
    verbose=1,#0、1或2。详细模式。0 =静音,1 =进度条,2 =每个epoch输出一行
    sample_weight=None,#测试样本的可选Numpy权重数组,用于对损失函数加权
    steps=None,#宣布评估阶段结束之前的步骤总数
    callbacks=None,#评估期间要应用的回调列表
    max_queue_size=10,# 生成器队列最大值
    workers=1,#最大进程数
    use_multiprocessing=False,#是否开启基于进程的线程
    return_dict=False,#将损失和指标结果作为dict返回
)

2.4 Model.predict()

生成输入样本的输出预测。计算是分批进行的

Model.predict(
    x,#输入样本
    batch_size=None,#批量大小
    verbose=0,#0或1
    steps=None,#预测回合完成之前的总步数
    callbacks=None,#预测期间要应用的回调列表
    max_queue_size=10,#生成器队列的最大大小
    workers=1,#最大进程数
    use_multiprocessing=False,#是否开启基于进程的线程
)

2.5 Model.train_on_batch()

对单批数据运行一次梯度更新。

Model.train_on_batch(
    x,#输入数据
    y=None,#目标数据
    sample_weight=None,#与x长度相同的可选数组,包含要应用于每个样本的模型损失的权重
    class_weight=None,#可选的,字典格式,将类索引(整数)映射到权重(浮点数),以应用于训练期间此类中样本的模型损失,这可能有助于告诉模型“更多关注”来自代表性不足的类的样本。
    reset_metrics=True,#True,则返回的指标仅适用于该批次。如果为False,则指标将有状态地跨批次累积。
    return_dict=False,#如果为True,则将损失和指标结果作为dict返回,每个键都是指标的名称。如果为False,则将它们作为列表返回
)

2.6 Model.test_on_batch()

在一批样品上测试模型。

Model.test_on_batch(
    x,
    y=None, 
    sample_weight=None, 
    reset_metrics=True, 
    return_dict=False
)

2.7 Model.predict_on_batch()

返回单批样品的预测

Model.predict_on_batch(x)

3 使用

有两种创建方式
具体参考keras创建model的两种方式

3.1 Sequential序贯模型

Sequential 是实现全连接网络的最好方式
Sequential 模型是多个网络层的线性堆栈,可以从 keras 的模型库中导入 Sequential 模型:

from keras.layers import Dense,Activation
from keras.models import Sequential
import tensorflow as tf
 
# 创建模型
model = Sequential()
# 搭建神经网络
model.add(Dense(units=64,input_dim=100))
model.add(Activation('relu'))
model.add(Dense(units=10))
model.add(Activation('softmax'))

3.2 Model函数式模型

函数式模型接口是用户定义多输出模型、非循环有向模型或具有共享层的模型等复杂模型的途径。换言之,只要你的模型不是类似 VGG 一条路走到黑的模型,或者你的模型需要多于一个的输出,那么你总应该选择函数式模型。函数式模型是最广泛的一类模型,序贯模型(Sequential)只是它的一种特殊情况。

from keras.layers import Input, Dense
from keras.models import Model

# 输入数据 
inputs = Input(shape=(784,))
 
# 三个全连接层
x = Dense(64, activation='relu')(inputs)
x = Dense(64, activation='relu')(x)
predictions = Dense(10, activation='softmax')(x)
 
# 使用Model,搭建三层全连接层的神经网络
model = Model(inputs=inputs, outputs=predictions)
# 配置训练神经网络的参数
model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])
# 开始训练
model.fit(data, labels)