Python从0到100(七十八):神经网络--从0开始搭建全连接网络和CNN网络

在这里插入图片描述

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!
欢迎大家订阅专栏:零基础学Python:Python从0到100最新最全教程!

今天来学习一下如何从0开始搭建全连接网络和CNN网络,并通过实验简单对比一下两种神经网络的不同之处,本文目录较长,可以根据需要自动选取要看的内容~

本文目录:

  • 一、搭建4层全连接神经网络
    • 1.调用库函数
    • 2.选择模型,构建网络
    • 3.编译(使用交叉熵作为loss函数)
    • 4.输出
    • 5.画出图像
    • 6.结论
  • 二、搭建CNN网络
    • 1.调用库函数
    • 2.调用数据集
    • 3.图片归一化
    • 4.选择模型,构建网络
    • 5.编译
    • 6.批量输入的样本个数
    • 7.训练
    • 8.输出
    • 9.画出图像
    • 10.结论
  • 三、两种网络对比
    • 文末送书
      • **`本期推荐1:`**
      • **`本期推荐2:`**

说明:在此试验下,我们使用的是使用tf2.x版本,在jupyter环境下完成
在本文中,我们将主要完成以下四个任务:

  • 加载keras内置的mnist数据库

  • 自己搭建简单神经网络,并自选损失函数和优化方法

  • 搭建4层全连接神经网络,除输入层以外,各层神经元个数分别为1000,300,64,10,激活函数自选

  • 搭建CNN网络,要求有1个卷积层(32卷积核),1个池化层(2x2),1个卷积层(16卷积核),1个全局池化层(globalMaxPool),一个全连接输出层,激活函数自选

一、搭建4层全连接神经网络

加载keras内置的mnist数据库,搭建4层全连接神经网络,除输入层以外,各层神经元个数分别为1000,300,64,10,激活函数自选

1.调用库函数

import tensorflow as tf
import matplotlib.pyplot as plt
mnist = tf.keras.datasets.mnist
from tensorflow.keras.layers import Flatten,Dense,Dropout

2.选择模型,构建网络

搭建4层全连接神经网络,除输入层以外,各层神经元个数分别为1000,300,64,10

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0# 选择模型,构建网络
model = tf.keras.models.Sequential()
model.add(Flatten(input_shape=(28, 28)))
# 各层神经元个数分别为1000,300,64,10
model.add(Dense(1000, activation='relu'))
model.add(Dense(300, activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.2))  # 采用20%的dropout
model.add(Dense(10, activation='softmax'))  # 输出结果是10个类别,所以维度是10,最后一层用softmax作为激活函数

3.编译(使用交叉熵作为loss函数)

指明优化器、损失函数、准确率计算函数

# 编译(使用交叉熵作为loss函数),指明优化器、损失函数、准确率计算函数
model.compile(optimizer=tf.keras.optimizers.Adam(),loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),metrics=[tf.keras.metrics.sparse_categorical_accuracy])# 训练(训练10个epoch)
history = model.fit(x_train, y_train, epochs=10)

这里是训练的结果:
在这里插入图片描述

4.输出

输出测试集上的预测准确率

# 输出
scores = model.evaluate(x_test,y_test)
print(scores)
print("The accuracy of the model is %f" % scores[1])  #输出测试集上的预测准确率

这里是输出的结果:
在这里插入图片描述

5.画出图像

使用plt模块进行数据可视化处理

# 画出图像
plt.plot(history.history['loss'], color='red', label='Loss')
plt.legend(loc='best')
plt.title('Training Loss')
plt.show()

在这里插入图片描述

6.结论

第一种神经网络准确率:0.976200

二、搭建CNN网络

要求有1个卷积层,1个池化层,1个全局池化层(globalMaxPool),一个全连接输出层,激活函数自选

1.调用库函数

import matplotlib.pyplot as plt
import tensorflow as tf
import tensorflow_datasets as tfds
import math
from tensorflow.keras.layers import Conv2D,MaxPooling2D,GlobalMaxPooling2D,Flatten,Dense

2.调用数据集

加载keras内置的mnist数据库

# 调用数据集
dataset, metaset = tfds.load('mnist', as_supervised=True, with_info=True)
train_dataset, test_dataset = dataset['train'], dataset['test']

3.图片归一化

# 图片归一化
def normalize(images, labels):images = tf.cast(images, tf.float32)images /= 255return images, labels
train_dataset = train_dataset.map(normalize)
test_dataset = test_dataset.map(normalize)

4.选择模型,构建网络

构建出1个卷积层,1个池化层,1个全局池化层(globalMaxPool),一个全连接输出层

# 选择模型,构建网络
model = tf.keras.Sequential()# 卷积层
model.add(Conv2D(32, (5, 5), padding='same', activation=tf.nn.relu, input_shape=(28, 28, 1))),  # 池化层 
model.add(MaxPooling2D((2, 2), strides=2)), # 全局池化层(globalMaxPool)
model.add(Conv2D(64, (5, 5), padding='same', activation=tf.nn.relu)),  # 卷积层
model.add(GlobalMaxPooling2D()),# 全连接输出层
model.add(Flatten()),#展平
model.add(Dense(512, activation=tf.nn.relu)),
model.add(Dense(10, activation=tf.nn.softmax))# 输出结果是10个类别,所以维度是10,最后一层用softmax作为激活函数

5.编译

指明优化器、损失函数、准确率计算函数

# 编译(使用交叉熵作为loss函数),指明优化器、损失函数、准确率计算函数
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
# 展示训练的过程
display(model.summary())

这里是输出的结果:
在这里插入图片描述

6.批量输入的样本个数

# 批量输入的样本个数
BATCH_SIZE = 64
num_train = metaset.splits['train'].num_examples
num_test = metaset.splits['test'].num_examples
train_dataset = train_dataset.repeat().shuffle(num_train).batch(BATCH_SIZE)
test_dataset = test_dataset.repeat().shuffle(num_test).batch(BATCH_SIZE)

7.训练

训练10个epoch

# 训练(训练10个epoch)
history = model.fit(train_dataset, epochs=10, steps_per_epoch=math.ceil(num_train / BATCH_SIZE))

这里是输出的结果:
在这里插入图片描述

8.输出

# 输出
test_loss, test_accuracy = model.evaluate(test_dataset, steps=math.ceil(num_test / BATCH_SIZE))
print(test_loss, test_accuracy)

这里是输出的结果:
在这里插入图片描述

9.画出图像

使用plt模块进行数据可视化处理

# 画出图像
plt.plot(history.history['loss'], color='red', label='Loss')
plt.legend(loc='best')
plt.title('Training Loss')
plt.show()

这里是输出的结果:
在这里插入图片描述

10.结论

第二种神经网络准确率:0.993232

三、两种网络对比

第一种神经网络准确率:0.976200 第二种神经网络准确率:0.993232
总结: 通过对比我们可以发现CNN卷积神经网络相对于传统神经网络NN准确率会高一些,由卷积的操作可知,输出图像中的任何一个单元,只跟输入图像的一部分有关系。而传统神经网络中,由于都是全连接,所以输出的任何一个单元,都要受输入的所有的单元的影响。这样无形中会对图像的识别效果大打折扣,因此CNN在此种方面会更具优势

文末送书

本期推荐1:

《AI智能运营从入门到精通》
巧用AI大模型,带你深度解析用户洞察+精准策略+智能创作+数据模型,构建你的竞争壁垒。
关键点
在这里插入图片描述

京东:https://item.jd.com/14809514.html

★站在运营视角解读AI技术:AI 的底层逻辑与应用方法。
★AI构建精细化运营策略:利用AI画像分层用户,积分激励提升价值,基于生命周期理论,个性化推荐促精细化运营。
★AI智能内容创作助手:助您构建创意选题库,策划高质量脚本,降低内容重复率,训练文案打造爆款标题,生成调研问卷洞悉需求,分析文本偏好,以RSM模型规划活动,并自动撰写运营周报。
★AI驱动数据分析决策:AI作为数据分析的强大助手,不仅加速了决策效率,还提供了从基础到进阶的全面运营数据分析能力。
内容简介
本书从多个方面介绍了如何整合AI技术进行运营工作,包括AI与用户运营的融合、精细化运营策略的构建、智能内容创作助手的运用、AI驱动分析决策。
读者可以通过本书学习如何利用AI处理运营工作,从而更好地满足目标受众需求,提高内容质量,做出更准确的决策,并提升工作效率。本书内容丰富实用,旨在帮助读者适应

本期推荐2:

《AI智能运营从入门到精通》
Blender 2D动画制作指南:软件基础+蜡笔应用+动画原理+3D辅助+角色设计+场景设计+渲染导出,全方位展示Blender 2D动画设计制作全流程。
在这里插入图片描述

京东:https://item.jd.com/14833184.html

关键点
1.专业保证:Blender 中国社区官方推荐;笔者作为软件中国区大版主,对动画行业的发展有精准把握。
2.跨界融合:集3D动画空间感与2D动画绘画感于一体,打破次元壁,创造全新视觉体验。
3.全流程覆盖:从软件基础到角色设计、场景设计、渲染导出,全方位展示Blender 2D动画设计制作流程。
4.实战教学:图文步骤+视频教学+源文件包+效果展示,助你快速上手,轻松掌握动画制作精髓。
5.进阶提升:夯实基础+进阶修炼+精美案例+商业标准,助你实现从新手到高手的华丽蜕变。
内容简介
Blender 是一款功能强大、免费且开源的图形图像软件,它集成了建模、动画、材质设计、渲染、音频处理及视频剪辑等功能,为动画短片的制作提供了一站式解决方案。本书专注于指导读者利
用 Blender 进行二维动画制作,深入剖析其在蜡笔模式下的各类工具、修改器及视觉特效工具,全面探索该模式下的功能特性。通过综合运用这些工具与多样化的表现形式,读者将学会如何绘制并创作出富有创意的二维动画短片,同时还将探索 Blender 在 2D 动画领域的更多绘制技巧与表现方式。
本书非常适合对 Blender 感兴趣,想要学习新型的动画创作方法的零基础 2D 动画爱好者。此外,它也非常适合动画、动漫、新媒体艺术、数字创意设计等相关专业的师生及从业者作为教学参考书或专业指南。

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

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

相关文章

SAP ABAP-日期格式问题 SAP内部错误,反序列化JSON字符串时发生异常 值 20241215 不是根据 ABAP 的 XML 格式的有效日期

SAP ABAP-日期格式问题 SAP内部错误,反序列化JSON字符串时发生异常 值 20241215 不是根据 ABAP 的 XML 格式的有效日期 在SAP内部用 YYYYMMDD没有问题 外部传入参数

使用docker compose安装gitlab

使用docker compose安装gitlab GitLab简介设置GITLAB_HOME路径创建docker挂载目录获取可用的GitLab版本编写docker-compose.yml文件启动docker基础配置GITLAB_OMNIBUS_CONFIG修改配置 中文设置数据库配置系统邮箱配置 GitLab简介 ‌GitLab是一个基于Git的开源项目,…

获取显示器(主/副屏)友好名称(FriendlyName)

在开发涉及多显示器的应用程序时,获取显示器的友好名称(Friendly Name)是一个常见需求。本文将深入探讨GetMonitorFriendlyName 方法,了解其实现细节和工作原理。 方法签名 public static string GetMonitorFriendlyName(bool i…

sql server索引优化语句

第一步 建一个测试表 --create table TestUsers --( -- Id int primary key identity(1,1), -- Username varchar(30) not null, -- Password varchar(10) not null, -- CreateDateTime datetime not null --)第二步 插入100w数据 大概1分钟执行时间 ----插入数据…

day-21 内核链表以及栈

1.昨日作业 1.删除指定节点 找到删除就完事了,双向可以停在删除处。 /***************************** 功能:删除指定结点(通过姓名)* 参数:phead;oldname; * 返回:成功0,失-1&…

我在广州学 Mysql 系列——有关 Mysql 函数的练习

ℹ️大家好,我是LXJ,通过Mysql各种函数的相关学习,本文将通过一些练习来巩固Mysql的函数~~ 明天就冬至啦,提前大家冬至快乐!!“差不多冬至,一早一晚还是有雨”~ 复习:👉《…

第3节 测试套件数据驱动

创建Excel、 CSV测试数据 1. 从主菜单中选择 File > New > Test Data。将显示新的测试数据对话框。输入测试数据的名称并选择数据类型作为Excel File/ CSV File 。单击OK。 2. 浏览到要导入Katalon Studio的Excel File, 选择Excel中的sheetName,或者CSV文件…

tomato靶场攻略

前提:kali和tomato的连接方式都为net模式 tomato的默认网络连接方式为桥接模式,导入前注意修改,将tomato.ova的镜像导入虚拟机中 出现此页面则表示导入成功,打开kali虚拟机终端,切换为root权限 arp-scan -l 浏览器访…

【数据安全】如何保证其安全

数据安全风险 数字经济时代,数据已成为重要的生产要素。智慧城市、智慧政务的建设,正以数据为核心,推动城市管理的智能化和公共服务的优化。然而,公共数据开放共享与隐私保护之间的矛盾日益凸显,如何在确保数据安全的…

go聊天系统项目6-服务端发送消息

一、前言 敬告:本文不讲解代码,只是把代码展示出来。 该代码之前的代码见 go 聊天系统项目-1 go聊天系统项目-2 redis 验证用户id和密码 go聊天系统项目-3 redis注册用户 go聊天项目4-显示用户列表 go 聊天系统项目-5 客户端发消息 注意:本文使用 go mo…

【深度学习-论文】通俗易懂的理解多标签识别

文章目录 1. 文章主要内容2. 通俗易懂的理解多标签分类到底是如何实现的通俗易懂的多标签分类实现介绍实现步骤为什么这么做?小结论文题目:Rada r emitter multi-la bel recognition based on residual network 基于残差网络的雷达发射机多标签识别1. 文章主要内容 《基于残…

day5,数据结构,单向,双向,循环链表

1】思维导图 2】完成单向循环链表的所有操作 【创建、判空、尾插、遍历、尾删、销毁】 创建: LooplinkPtr caerte() {LooplinkPtr h(LooplinkPtr)malloc(sizeof(Looplink));if(NULLh){printf("创建失败\n");return NULL;}h->len0;h->data0;h->…

CH340系列芯片驱动电路·CH340系列芯片驱动!!!

目录 CH340基础知识 CH340常见类型 CH340引脚功能讲解 CH340驱动电路 CH340系列芯片数据手册 编写不易,仅供学习,请勿搬运,感谢理解 常见元器件驱动电路文章专栏连接 LM7805系列降压芯片驱动电路降压芯片驱动电路详解-CSDN博客 ME62…

【机器学习案列】使用随机森林(RF)进行白葡萄酒质量预测

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

PostgreSql-学习06-libpq之同步命令处理

目录 一、环境 二、介绍 三、函数 1、PQsetdbLogin (1)作用 (2)声明 (3)参数介绍 (4)检测成功与否 2、PQfinish (1)作用 (2&#xff0…

Reactor

文章目录 正确的理解发送double free问题 1.把我们的reactor进行拆分2.链接管理3.Reactor的理论 listensock只需要设置_recv_cb,而其他sock,读,写,异常 所以今天写nullptr其实就不太对,添加为空就没办法去响应事件 获…

Mac iOS、Android、Flutter、React Native开发环境配置

1.安装XCode https://apps.apple.com/cn/app/xcode/id497799835?mt12 2.安装Android Studio https://developer.android.google.cn/studio 3.安装brew 参考地址:https://www.jianshu.com/p/22122a1d4474 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunk…

[创业之路-200]:什么是business(业务)?B2B, B2C, B2G业务, 什么是业务设计?

目录 一、基本概念 1、基础定义 2、构成要素 3、业务流程 4、业务范围 5、语境中的含义 六、常见的业务类型 1、按行业分类 2、按运营模式分类 3、按业务性质分类 4、其他分类方式 三、B2B, B2C, B2G业务 1、B2B(Business-to-Business) 2、…

React,Antd实现文本输入框话题添加及删除的完整功能解决方案

最终效果就是实现该输入框: 添加话题时,话题自动插入到输入框前面多文本输入框左侧间距为话题的宽度多行文本时,第二行紧接开头渲染删除文本时,如果删除到话题,再次删除,话题被删除 首先构造div结构 cons…

【机器人】ATM 用于策略学习的任意点轨迹建模 RSS 2024 | 论文精读

文章提出了一种新的框架,名为Any-point Trajectory Modeling (ATM) ,称为任意点轨迹建模。 用于从视频中预测任意点的未来轨迹,从而在最少动作标签数据的情况下,学习稳健的视觉运动策略。 图中展示了三个案例,打开柜子…