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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 这篇文章详细介绍了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)
目录
相关文章
|
6天前
|
算法 前端开发 数据处理
小白学python-深入解析一位字符判定算法
小白学python-深入解析一位字符判定算法
19 0
|
6天前
|
机器学习/深度学习 数据采集 存储
时间序列预测新突破:深入解析循环神经网络(RNN)在金融数据分析中的应用
【10月更文挑战第7天】时间序列预测是数据科学领域的一个重要课题,特别是在金融行业中。准确的时间序列预测能够帮助投资者做出更明智的决策,比如股票价格预测、汇率变动预测等。近年来,随着深度学习技术的发展,尤其是循环神经网络(Recurrent Neural Networks, RNNs)及其变体如长短期记忆网络(LSTM)和门控循环单元(GRU),在处理时间序列数据方面展现出了巨大的潜力。本文将探讨RNN的基本概念,并通过具体的代码示例展示如何使用这些模型来进行金融数据分析。
42 2
|
6天前
|
自然语言处理 数据处理 Python
python操作和解析ppt文件 | python小知识
本文将带你从零开始,了解PPT解析的工具、工作原理以及常用的基本操作,并提供具体的代码示例和必要的说明【10月更文挑战第4天】
112 60
|
6天前
|
网络协议 前端开发 Java
网络协议与IO模型
网络协议与IO模型
网络协议与IO模型
|
5天前
|
机器学习/深度学习 网络架构 计算机视觉
目标检测笔记(一):不同模型的网络架构介绍和代码
这篇文章介绍了ShuffleNetV2网络架构及其代码实现,包括模型结构、代码细节和不同版本的模型。ShuffleNetV2是一个高效的卷积神经网络,适用于深度学习中的目标检测任务。
22 1
目标检测笔记(一):不同模型的网络架构介绍和代码
|
2天前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
14 4
|
3天前
|
机器学习/深度学习 算法 Python
深度解析机器学习中过拟合与欠拟合现象:理解模型偏差背后的原因及其解决方案,附带Python示例代码助你轻松掌握平衡技巧
【10月更文挑战第10天】机器学习模型旨在从数据中学习规律并预测新数据。训练过程中常遇过拟合和欠拟合问题。过拟合指模型在训练集上表现优异但泛化能力差,欠拟合则指模型未能充分学习数据规律,两者均影响模型效果。解决方法包括正则化、增加训练数据和特征选择等。示例代码展示了如何使用Python和Scikit-learn进行线性回归建模,并观察不同情况下的表现。
21 3
|
5天前
|
网络协议 Python
IP地址探秘:识别与解析的Python之旅 🚀
《IP地址探秘:识别与解析的Python之旅》通过Python的`ipaddress`模块,轻松实现IP地址的分类(如单播、多播、私有、环回或公有)及子网内所有IP的生成,使网络管理更加便捷高效。示例代码直观展示了功能实现过程。
10 1
|
1天前
|
存储 分布式计算 负载均衡
|
4天前
|
运维 安全 网络协议
Python 网络编程:端口检测与IP解析
本文介绍了使用Python进行网络编程的两个重要技能:检查端口状态和根据IP地址解析主机名。通过`socket`库实现端口扫描和主机名解析的功能,并提供了详细的示例代码。文章最后还展示了如何整合这两部分代码,实现一个简单的命令行端口扫描器,适用于网络故障排查和安全审计。
12 0