【Python-Keras】Keras搭建神经网络模型的Model解析与使用

简介: 这篇文章详细介绍了Keras中搭建神经网络模型的`Model`类及其API方法,包括模型配置、训练、评估、预测等,并展示了如何使用Sequential模型和函数式模型来构建和训练神经网络。

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)
目录
相关文章
|
4月前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
6月前
|
机器学习/深度学习 数据采集 数据挖掘
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
225 2
|
4月前
|
机器学习/深度学习 数据采集 人工智能
深度学习实战指南:从神经网络基础到模型优化的完整攻略
🌟 蒋星熠Jaxonic,AI探索者。深耕深度学习,从神经网络到Transformer,用代码践行智能革命。分享实战经验,助你构建CV、NLP模型,共赴二进制星辰大海。
|
5月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
376 2
|
5月前
|
机器学习/深度学习 人工智能 算法
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic带你深入卷积神经网络(CNN)核心技术,从生物启发到数学原理,详解ResNet、注意力机制与模型优化,探索视觉智能的演进之路。
533 11
|
5月前
|
机器学习/深度学习 并行计算 算法
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
138 8
|
5月前
|
机器学习/深度学习 数据采集 并行计算
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
550 2
|
5月前
|
算法 安全 新能源
基于DistFlow的含分布式电源配电网优化模型【IEEE39节点】(Python代码实现)
基于DistFlow的含分布式电源配电网优化模型【IEEE39节点】(Python代码实现)
438 0
|
6月前
|
机器学习/深度学习 算法 调度
【切负荷】计及切负荷和直流潮流(DC-OPF)风-火-储经济调度模型研究【IEEE24节点】(Python代码实现)
【切负荷】计及切负荷和直流潮流(DC-OPF)风-火-储经济调度模型研究【IEEE24节点】(Python代码实现)
292 0
|
5月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
465 0

推荐镜像

更多