【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)
目录
相关文章
|
6月前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
6月前
|
运维 监控 数据可视化
Python 网络请求架构——统一 SOCKS5 接入与配置管理
通过统一接入端点与标准化认证,集中管理配置、连接策略及监控,实现跨技术栈的一致性网络出口,提升系统稳定性、可维护性与可观测性。
|
9月前
|
机器学习/深度学习 算法 量子技术
GQNN框架:让Python开发者轻松构建量子神经网络
为降低量子神经网络的研发门槛并提升其实用性,本文介绍一个名为GQNN(Generalized Quantum Neural Network)的Python开发框架。
236 4
GQNN框架:让Python开发者轻松构建量子神经网络
|
6月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的青少年网络使用情况分析及预测系统
本研究基于Python大数据技术,构建青少年网络行为分析系统,旨在破解现有防沉迷模式下用户画像模糊、预警滞后等难题。通过整合多平台亿级数据,运用机器学习实现精准行为预测与实时干预,推动数字治理向“数据驱动”转型,为家庭、学校及政府提供科学决策支持,助力青少年健康上网。
|
7月前
|
机器学习/深度学习 人工智能 算法
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic带你深入卷积神经网络(CNN)核心技术,从生物启发到数学原理,详解ResNet、注意力机制与模型优化,探索视觉智能的演进之路。
671 11
|
7月前
|
JavaScript Java 大数据
基于python的网络课程在线学习交流系统
本研究聚焦网络课程在线学习交流系统,从社会、技术、教育三方面探讨其发展背景与意义。系统借助Java、Spring Boot、MySQL、Vue等技术实现,融合云计算、大数据与人工智能,推动教育公平与教学模式创新,具有重要理论价值与实践意义。
|
8月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
583 18
|
9月前
|
JSON 网络安全 数据格式
Python网络请求库requests使用详述
总结来说,`requests`库非常适用于需要快速、简易、可靠进行HTTP请求的应用场景,它的简洁性让开发者避免繁琐的网络代码而专注于交互逻辑本身。通过上述方式,你可以利用 `requests`处理大部分常见的HTTP请求需求。
723 51
|
8月前
|
数据采集 存储 数据可视化
Python网络爬虫在环境保护中的应用:污染源监测数据抓取与分析
在环保领域,数据是决策基础,但分散在多个平台,获取困难。Python网络爬虫技术灵活高效,可自动化抓取空气质量、水质、污染源等数据,实现多平台整合、实时更新、结构化存储与异常预警。本文详解爬虫实战应用,涵盖技术选型、代码实现、反爬策略与数据分析,助力环保数据高效利用。
444 0
|
9月前
|
存储 监控 算法
基于 Python 跳表算法的局域网网络监控软件动态数据索引优化策略研究
局域网网络监控软件需高效处理终端行为数据,跳表作为一种基于概率平衡的动态数据结构,具备高效的插入、删除与查询性能(平均时间复杂度为O(log n)),适用于高频数据写入和随机查询场景。本文深入解析跳表原理,探讨其在局域网监控中的适配性,并提供基于Python的完整实现方案,优化终端会话管理,提升系统响应性能。
251 4

推荐镜像

更多