深度学习技术之加宽前馈全连接神经网络

深度学习技术

  • 加宽前馈全连接神经网络
    • 1. Functional API 搭建神经网络模型
      • 1.1 利用Functional API编写宽深神经网络模型进行手写数字识别
        • 1.1.1 导入需要的库
        • 1.1.2 加载虹膜(Iris)数据集
        • 1.1.3 分割训练集和测试集
        • 1.1.4 定义模型输入层
        • 1.1.5 添加隐藏层
        • 1.1.6 拼接输入层和第二个隐藏层
        • 1.1.7 添加输出层
        • 1.1.8 创建模型
        • 1.1.9 打印模型的摘要
        • 1.1.10 模型编译并训练
      • 1.2 利用Functional API编写多输入神经网络模型进行手写数字识别
        • 1.2.1 分割子集
        • 1.2.2 定义输入层
        • 1.2.3 定义全连接层
        • 1.2.4 创建模型
        • 1.2.5 编译与训练模型
        • 1.2.6 训练历史数据的可视化
    • 2. SubClassing API 搭建神经网络模型
      • 2.1 前馈全连接神经网络手写数字识别
        • 2.1.1 定义一个Keras模型类
        • 2.1.2 定义方法
        • 2.1.3 初始化模型
        • 2.1.4 通过在初始化中传递参数改变模型元素默认值
        • 2.1.5 编译与训练模型
        • 2.1.6 打印模型摘要

加宽前馈全连接神经网络

1. Functional API 搭建神经网络模型

1.1 利用Functional API编写宽深神经网络模型进行手写数字识别

1.1.1 导入需要的库

利用Sequential API建立一个顺序传播的前馈全连接神经网络,导入numpy、pandas,tensorflow等库,以及导入matplotlib的pyplot模块。从sklearn库的datasets模块中导入load_iris函数,以及从sklearn库的model_selection模块中导入train_test_split函数。从TensorFlow库中导入Keras模块。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import tensorflow as tf
from tensorflow import keras
1.1.2 加载虹膜(Iris)数据集

虹膜(Iris)数据集是scikit-learn库中内置的一个样本数据集,它包含了150个样本,分为三个类,每个类有50个样本。这三个类分别是山鸢尾(Iris Setosa)、杂色鸢尾(Iris Versicolour)和维吉尼亚鸢尾(Iris Virginica)。

iris = load_iris()
1.1.3 分割训练集和测试集

将虹膜(Iris)数据集分割为训练集和测试集,得到训练集x_train和y_train,再将分割得到的训练集x_train和y_train分割为新的训练集和验证集。

x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target, test_size=0.2, random_state=23)
X_train, X_valid, y_train, y_valid=train_test_split(x_train, y_train,test_size=0.2, random_state=12)
1.1.4 定义模型输入层

使用X_train.shape[1:]作为输入层的形状,因为X_train.shape[0]是批量大小,通常在训练过程中改变,而X_train.shape[1:]包含了特征的数量,这些数量在训练过程中保持不变。

inputs = keras.layers.Input(shape=X_train.shape[1:])
1.1.5 添加隐藏层

隐藏层,包含神经元,并使用ReLU激活函数。

hidden1 = keras.layers.Dense(300, activation="relu")(inputs)
hidden2 = keras.layers.Dense(100, activation="relu")(hidden1)
1.1.6 拼接输入层和第二个隐藏层

将输入层和第二个隐藏层的输出进行拼接,得到一个融合了输入和中间层信息的特征向量。

concat = keras.layers.concatenate([inputs, hidden2])
1.1.7 添加输出层

添加了一个输出层,包含10个神经元,使用softmax激活函数,因为模型是用于多类分类任务。

output = keras.layers.Dense(10, activation="softmax")(concat)
1.1.8 创建模型

创建了一个完整的模型,将输入层和输出层连接起来,形成了一个有监督学习的模型结构。
这个模型结构结合了“宽”模型(wide model)和“深”模型(deep model)的特点,通过输入层和隐藏层的拼接来融合这两种模型。

model_fun_WideDeep = keras.models.Model(inputs=[inputs], outputs=[output])

运行结果:
在这里插入图片描述

1.1.9 打印模型的摘要
model_fun_WideDeep.summary()
1.1.10 模型编译并训练

model_fun_WideDeep.fit()方法将开始模型的训练过程,并在每个轮次结束后使用验证数据评估模型的性能。训练过程中,模型将逐渐学习如何将输入特征映射到正确的输出类别。

model_fun_WideDeep.compile(loss="sparse_categorical_crossentropy",optimizer="sgd",metrics=["accuracy"])
h=model_fun_WideDeep.fit(X_train, y_train, batch_size=32, epochs=30, validation_data=(X_valid, y_valid))

运行结果:
在这里插入图片描述

1.2 利用Functional API编写多输入神经网络模型进行手写数字识别

1.2.1 分割子集

将训练集X_train和验证集X_valid分割为两个子集。

X_train_A, X_train_B = X_train[:, :200], X_train[:, 100:]
X_valid_A, X_valid_B = X_valid[:, :200], X_valid[:, 100:]
1.2.2 定义输入层
input_A = keras.layers.Input(shape=X_train_A.shape[1])
input_B = keras.layers.Input(shape=X_train_B.shape[1])
1.2.3 定义全连接层
hidden1 = keras.layers.Dense(300, activation="relu")(input_B)
hidden2 = keras.layers.Dense(100, activation="relu")(hiddenl)
1.2.4 创建模型

将输入层和输出层连接起来。

model_fun_MulIn = keras.models.Model(inputs=[input_A, input_B], outputs=[output])
1.2.5 编译与训练模型

在训练过程中,模型将使用指定的损失函数和优化器来更新权重,并使用准确率作为评估指标来监控性能。

model_fun_MulIn.compile(loss="sparse_categorical_crossentropy",optimizer="sgd",metrics=["accuracy"])

运行结果:
在这里插入图片描述

1.2.6 训练历史数据的可视化

图中显示了训练和验证集上的损失和准确率随轮次的变化情况。

pd.DataFrame(h.history).plot(figsize=(8,5))
plt.grid(True)
plt.gca().set_ylim(0,1)
plt.show()

运行结果:
在这里插入图片描述

2. SubClassing API 搭建神经网络模型

2.1 前馈全连接神经网络手写数字识别

2.1.1 定义一个Keras模型类

定义一个自定义的Keras模型类Model_sub_fnn,继承自keras.models.Model。这个类定义了一个简单的全连接神经网络,它有两个隐藏层和一个输出层。

class Model_sub_fnn(keras.models.Model):def __init__(self, units_1=300, units_2=100, units_out=10, activation='relu'):super().__init__()self.hidden1 = keras.layers.Dense(units_1, activation=activation)self.hidden2 = keras.layers.Dense(units_2, activation=activation)self.main_output = keras.layers.Dense(units_out, activation='softmax')
2.1.2 定义方法

给Model_sub_fnn类定义一个call方法。这个方法是Keras模型中的一个特殊方法,它定义了模型的前向传播过程,它将输入数据通过模型的所有层,并返回最终的输出。

def call(self, data):hidden1 = self.hidden1(data)hidden2 = self.hidden2(hidden1)main_output = self.main_output(hidden2)return main_output
2.1.3 初始化模型
model_sub_fnn = Model_sub_fnn()
2.1.4 通过在初始化中传递参数改变模型元素默认值
model_sub_fnn2 = Model_sub_fnn(300, 100, 10, activation='relu')
2.1.5 编译与训练模型

编译模型,使用训练数据和验证数据进行训练。在训练过程中,模型将使用指定的损失函数和优化器来更新权重,并使用准确率作为评估指标来监控性能。训练完成后,将得到模型的摘要,其中包含了模型的详细信息。

model_sub_fnn.compile(loss='sparse_categorical_crossentropy',optimizer='sgd',metrics=["accuracy")
h= model_sub_fnn.fit(X_train,y_train,batch_size=32,epochs=30,validation_data = (X_valid,y_valid))

运行结果:
在这里插入图片描述

2.1.6 打印模型摘要

打印出模型的摘要,其中包括模型的层结构、每个层的输出形状、层的参数数量以及整个模型的总参数数量。

model_sub_fnn.summary()

运行结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/11423.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图片转表格的免费软件,这几款值得收藏!

在数字化时代,图片转表格的需求日益增多。无论是工作汇报、数据分析还是学术研究,将图片中的信息转化为表格都能极大地提高工作效率。然而,许多人在面对这一任务时,往往感到无从下手。今天,我将为大家推荐几款免费的图…

如何在群晖NAS中开启FTP并实现使用公网地址远程访问传输文件

文章目录 1. 群晖安装Cpolar2. 创建FTP公网地址3. 开启群晖FTP服务4. 群晖FTP远程连接5. 固定FTP公网地址6. 固定FTP地址连接 本文主要介绍如何在群晖NAS中开启FTP服务并结合cpolar内网穿透工具,实现使用固定公网地址远程访问群晖FTP服务实现文件上传下载。 Cpolar内…

Nginx内网环境开启https

文章目录 前言一、open-ssl1. 验证2. 安装3.生成ssl证书 一、nginx1. 验证支持模块2. 安装必要模块2.1 重新编译nginx2.2 替换原文件 3. 配置https 总结 前言 nginx开启https前提: 服务器支持open-sslnginx 包含--with-http_ssl_module --with-stream --with-stre…

[笔试强训day08]

文章目录 HJ108 求最小公倍数NC95 数组中的最长连续子序列DP39 字母收集 HJ108 求最小公倍数 HJ108 求最小公倍数 #include<iostream>using namespace std;int a,b;int gcd(int a,int b) {if(b0) return a;return gcd(b,a%b); } int main() {cin>>a>>b;int …

嵌入式和单片机的区别在哪?

嵌入式和单片机是两个不同的概念&#xff0c;它们在很多方面都存在着差异。嵌入式系统是一种专用的计算机系统&#xff0c;通常用于控制和监测其他设备。它通常由微处理器、存储器、输入/输出接口和其他外围设备组成。嵌入式系统可以运行各种操作系统&#xff0c;如 Linux、Win…

el-dialog设置el-head固定

0 效果 1 代码 ::v-deep .adTextDetailDialogClass .el-dialog__body{max-height: calc(100vh - 150px);overflow: auto;border-top:1px solid #dfdfdf;border-bottom:1px solid #dfdfdf; } ::v-deep .adTextDetailDialogClass .el-dialog{position: fixed;height:fit-content;…

瑞芯微 rk3588 Linux系统备份还原 StepbyStep

1.系统备份 1.1 将瑞芯微平台嵌入式系统的root ssh 权限开通 step1:sudo vi /etc/ssh/sshd_config step2: 找到PermitRootLogin,把开关打开&#xff1a; PermitRootLogin yes step3:重启ssh服务 sudo systemctl restart sshd 1.2.使用瑞芯微的打包脚本把嵌入式系统系统打包 这…

通过钉钉卡片进行工单审批

我们通常通过钉钉机器人来发送通知&#xff0c;提醒审批人名下有待办工单需要处理。这种通知方式仅能提醒审批人到ITSM中处理&#xff0c;审批人需要打开电脑登陆平台处理&#xff0c;我们就考虑是否能有一种方式能够满足移动端审批&#xff1f; 这里我们可以使用ITSM的移动端版…

《小猫咪大城市》 48小时销量破40万套,一匹休闲游戏黑马诞生

易采游戏网5月13日消息&#xff0c;近日一款名为《小猫咪大城市》的游戏在Steam、Switch和Xbox平台上正式发售&#xff0c;凭借其独特的游戏设定和可爱的猫咪角色&#xff0c;迅速赢得了玩家们的喜爱。据官方宣布&#xff0c;游戏在发售后的短短48小时内&#xff0c;销量已经突…

经典文献阅读之--D-Map(无需射线投射的高分辨率激光雷达传感器的占据栅格地图)

0. 简介 占用地图是机器人系统中推理环境未知和已知区域的基本组成部分。《Occupancy Grid Mapping without Ray-Casting for High-resolution LiDAR Sensors》介绍了一种高分辨率LiDAR传感器的高效占用地图框架&#xff0c;称为D-Map。该框架引入了三个主要创新来解决占用地图…

信息化系统建设运维服务方案(投标)Word原件

《信息化系统运维服务方案》&#xff08;原件可获取&#xff09; 1.项目情况 2.服务简述 2.1服务内容 2.2服务方式 2.3服务要求 2.4服务流程 2.5工作流程 2.6业务关系 2.7培训 3.资源提供 3.1项目组成员 3.2服务保障 软件全套精华资料包清单部分文件列表&#xff1a; 工作安排任…

ICode国际青少年编程竞赛- Python-2级训练场-坐标入门

ICode国际青少年编程竞赛- Python-2级训练场-坐标入门 1、 d Item.x - Dev.x Dev.step(d)2、 d Item.y - Dev.y Dev.step(d)3、 d Dev.y - Item.y Dev.step(d)4、 d Item[0].x - Dev.x Dev.step(d) Dev.step(-d) Dev.turnRight() d Item[1].y - Dev.y Dev.step(d)…

电商数据接口|如何获取电商数据?

随着互联网的发展&#xff0c;电商的运营方式也逐渐数据化&#xff0c;在大数据的影响下&#xff0c;电商领域很大程度上改变了传统的运营模式。很多商家如今都非常重视数据&#xff0c;并将数据贯穿于整个店铺的运营之中。 那么&#xff0c;具体来说电商大数据有哪些妙用呢&a…

商务分析方法与工具(十):Python的趣味快捷-公司财务数据最炫酷可视化

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

软件2班20240513

第三次作业 package com.yanyu;import java.sql.*; import java.util.ResourceBundle;public class JDBCTest01 {public static void main(String[] args) {ResourceBundle bundle ResourceBundle.getBundle("com/resources/db");// ctrl alt vString driver …

高端智能终端RK3399主板在配送机器人项目的应用,支持免费定制

基于高端智能终端主板IoT-3399E推出了系列配送机器人&#xff0c;面向各类线下门店的配送服务。配送机器人可实现智能识别、精准配送、自动避障、自主调度系统、语音播报、信息互动等功能&#xff0c;大幅提升服务效率&#xff0c;为消费者带来更加便捷、智能的服务体验。 核心…

RK3568/RK3588智慧校园AI盒子方案,电子班牌,出入口管制,数字化校园等,支持鸿蒙,支持免费定制

智慧校园解决方案基于物联网、人工智能等新兴技术&#xff0c;为师生构建智能化校园环境&#xff0c;涵盖了校园安全、智慧教室、考勤管理、智慧食堂等多个场景&#xff0c;从工作、学习到生活&#xff0c;带来更人性化、更便捷、更高效的服务。 方案架构 方案特点 全面感知校园…

驾驭多云环境,加速AI创新丨Animbus Cloud 8.3.0 算力调度平台升级发布

大模型开启全球新一轮AI浪潮&#xff0c;伴随算力规模的爆发增长以及计算技术的多元创新&#xff0c;需要更稳定、高效、敏捷的异构计算基础设施&#xff0c;才能充分发挥对算力能力的重要支撑。 作为开放智能云边架构引领者&#xff0c;九州未来凭借多年的技术积累、实践沉淀…

深入理解Python对象的字符串表示:`__str__`与`__repr__`的区别与应用

在Python编程中&#xff0c;我们经常需要将对象转换为字符串形式&#xff0c;无论是为了打印输出还是进行字符串操作。Python提供了两种特殊的方法来定义对象的字符串表示形式&#xff1a;__str__和__repr__。本文将详细讲解这两种方法的区别、用途以及如何在实际编程中使用它们…

BA112协议网关促进楼宇自控系统与OPC UA平台集成

在当今智能化建筑的潮流下&#xff0c;楼宇自控系统的发展已成为建筑行业的重要趋势。然而&#xff0c;由于不同厂商生产的楼宇自控设备使用的通信协议多样&#xff0c;导致了设备之间的互联互通存在困难。为了解决这一问题&#xff0c;钡铼技术最新推出了BACnet转OPC UA网关BA…