目录
- 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)