实验12 卷积神经网络

news2024/12/24 9:19:57

1. 实验目的

①掌握深度学习的基本原理;
②能够使用TensorFlow实现卷积神经网络,完成图像识别任务。

2. 实验内容

①设计卷积神经网络模型,实现对Mnist手写数字数据集的识别,并以可视化的形式输出模型训练的过程和结果;
②设计卷积神经网络模型,实现对Cifar10数据集的识别,并以可视化的形式输出模型训练的过程和结果。

3. 实验过程

题目一:

  使用Keras构建和训练卷积神经网络,实现对Mnist手写数字数据集的识别,并测试模型性能,以恰当的形式展现训练过程和结果。
要求:
  ⑴编写代码,构建卷积神经网络,实现上述功能。
  ⑵调整超参数,记录实验过程和结果。
调整卷积神经网络的结构和训练参数,找出最佳的结构和超参数,记录和分析实验结果;
  ⑶保存最佳模型,计算各层参数个数和模型总参数;
  ⑷分析和总结:
  你都调整了哪些参数?结合训练过程,说明各个超参数对模型性能的影响;
① 代码

import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
import pandas as pd

#加载数据集
mnist = tf.keras.datasets.mnist
(train_x,train_y),(test_x,test_y) = mnist.load_data()

#对属性进行归一化,使它的取值在0-1之间,同时转换为tensor张量,类型为tf.flost32
X_train = train_x.reshape(60000,28,28,1)
X_test = test_x.reshape(10000,28,28,1)

X_train,X_test = tf.cast(X_train / 255.0,tf.float32),tf.cast(X_test / 255.0,tf.float32)
y_train,y_test = tf.cast(train_y,tf.int32),tf.cast(test_y,tf.int32)

#建立模型
model = tf.keras.Sequential([
     #unit1
    tf.keras.layers.Conv2D(16,kernel_size=(3,3),padding="same",activation=tf.nn.relu,input_shape=(28,28,1)),
    tf.keras.layers.MaxPool2D(pool_size=(2,2)),

    #unit2
    tf.keras.layers.Conv2D(32,kernel_size=(3,3),padding="same",activation=tf.nn.relu),
    tf.keras.layers.MaxPool2D(pool_size=(2,2)),

    #unit3
    tf.keras.layers.Flatten(),

    #unit4
    tf.keras.layers.Dense(128,activation="relu"),
    tf.keras.layers.Dense(10,activation="softmax")
])

#配置训练方法
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['sparse_categorical_accuracy'])

#训练模型
history = model.fit(X_train,y_train,batch_size=64,epochs=5,validation_split=0.2)

#评估模型
model.evaluate(X_test,y_test,verbose=2)
pd.DataFrame(history.history).to_csv("training_log.csv",index=False)
graph = pd.read_csv('training_log.csv')

#使用模型
for i in range(10):
    num = np.random.randint(1,10000)

    plt.subplot(2,5,i+1)
    plt.axis("off")
    plt.imshow(test_x[num],cmap="gray")
    demo = tf.reshape(X_test[num],(1,28,28,1))
    y_pred = np.argmax(model.predict(demo))
    plt.title("y="+ str(test_y[num])+"\ny_pred"+str(y_pred))

plt.show()

② 结果记录
在这里插入图片描述

在这里插入图片描述

③ 实验总结
正确率98.88%,能够较好地预测实验结果。

题目二:

  使用Keras构建和训练卷积神经网络,实现对Cifar10数据集的识别,并测试模型性能,以恰当的形式展现训练过程和结果。
要求:
  ⑴编写代码,构建卷积神经网络,实现上述功能。
  ⑵调整超参数,记录实验过程和结果。
  调整卷积神经网络的结构和训练参数,找出最佳的结构和超参数,记录和分析实验结果;
  ⑶保存最佳模型,计算各层参数个数和模型总参数;
  ⑷分析和总结:
  你都调整了哪些参数?结合训练过程,说明各个超参数对模型性能的影响;
① 代码

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import tensorflow.keras.layers as ly
plt.rcParams['font.family'] = "SimHei"
plt.rcParams["axes.unicode_minus"] = False

#加载数据集
cifar10 = tf.keras.datasets.cifar10
(x_train,y_train),(x_test,y_test) = cifar10.load_data()

#数据预处理
x_train,x_test = tf.cast(x_train,tf.float32) / 255.0,tf.cast(x_test,tf.float32) / 255.0
y_train,y_test = tf.cast(y_train,tf.int32),tf.cast(y_test,tf.int32)

#建立模型
model = tf.keras.Sequential([
    #特征提取
    ly.Conv2D(16,kernel_size=(3,3),padding="same",activation=tf.nn.relu,input_shape=x_train.shape[1:]),
    ly.Conv2D(16,kernel_size=(3,3),padding="same",activation=tf.nn.relu),
    ly.MaxPool2D(pool_size=(2,2)),
    ly.Dropout(0.2),

    ly.Conv2D(32,kernel_size=(3,3),padding="same",activation=tf.nn.relu),
    ly.Conv2D(32,kernel_size=(3,3),padding="same",activation=tf.nn.relu),
    ly.MaxPool2D(pool_size=(2,2)),
    ly.Dropout(0.2),

    #分类识别
    ly.Flatten(),
    ly.Dropout(0.2),
    ly.Dense(128,activation="relu"),
    ly.Dropout(0.2),
    ly.Dense(10,activation="softmax")
])

#查看摘要
print(model.summary())
#配置训练方法
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['sparse_categorical_accuracy'])
#训练模型
h = model.fit(x_train,y_train,batch_size=64,epochs=5,validation_split=0.2)
#评估模型
print(model.evaluate(x_test,y_test,verbose=2))

#结果可视化
print(h.history)
loss = h.history['loss']
acc = h.history['sparse_categorical_accuracy']
val_loss = h.history['val_loss']
val_acc = h.history['val_sparse_categorical_accuracy']
plt.figure(figsize=(10,3))
plt.subplot(121)
plt.plot(loss,color = 'b',label = "train")
plt.plot(val_loss,color = 'r',label = 'test')
plt.ylabel('loss')
plt.legend()
plt.subplot(122)
plt.plot(acc,color = 'b',label = "train")
plt.plot(val_acc,color = 'r',label = 'test')
plt.ylabel('Accuracy')
plt.legend()

#预测数据
plt.figure()
for i in range(10):
    num = np.random.randint(1,10000)
    plt.subplot(2,5,i+1)
    plt.axis("off")
    plt.imshow(x_test[num],cmap="gray")
    demo = tf.reshape(x_test[num],(1,32,32,3))
    y_pred = np.argmax(model.predict(demo))
    plt.title("标签值"+str((y_test.numpy())[num,0])+'\n预测值'+str(y_pred))
plt.show()
model.save("CIFAR10_CNN_weigts.h5")
model.load_weights("CIFAR10_CNN_weights.h5")

② 结果记录

在这里插入图片描述

在这里插入图片描述
③ 实验总结

在这里插入图片描述

在这里插入图片描述

4. 实验小结&讨论题

①和全连接网络相比,卷积神经网络有什么特点?卷积层和池化层的主要作用什么?是否卷积层和池化层的数量越多,模型的效果就越好?卷积核的大小对卷积神经网络性能有何影响?
卷积层:提取特征。“不全连接,参数共享”的特点大大降低了网络参数,保证了网络的稀疏性,防止过拟合。之所以可以“参数共享”,是因为样本存在局部相关的特性。
池化层:有MaxPool和AveragePool等。其中MaxPool应用广泛。因为经过MaxPool可以减小卷积核的尺寸,同时又可以保留相应特征,所以主要用来降维。
全连接层:在全连接的过程中丢失位置信息,可以理解为降低了学习过程中的参数敏感度;很多分类问题需要通过softmax层进行输出;进行非线性变换等等。
②比较题目一和题目二,所使用的网络结构有什么异同?比请对二者进行比较并分析原因。
相同点:都使用了卷积层和池化层,激活函数;
不同点:#数据预处理不同,数据格式也不同。x_train,x_test = tf.cast(x_train,tf.float32)/255.0, tf.cast(x_test,tf.float32)/255.0
③卷积神经网络的优化方式有哪些?在题目一和题目二中,你使用了哪些优化方式,优化的效果如何?请对实验结果进行对比和分析。
一般来说,提高泛化能力的方法主要有以下几个:
正则化
增加神经网络层数
使用正确的代价函数
④ 卷积神经网络中的超参数有哪些?结合题目一和题目二,说明它们对模型性能的影响。
每一层的卷积是的输出大小编程n-5+1,每卷积一次,宽高的维度就会减少4,使用更大的卷积层会更快的减少输出的大小,在输入的宽和高 周围加入额外的行/列,控制输出形状的减少量,填充Ph行和Pw列,输出形状为:(Nh-Kh+Ph+1)*(Nw-Kw+Pw+1),我们通常取Ph=Kh-1,Pw=Kw-1 这样保证了我们的输入和输出是一致的

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

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

相关文章

Qt--事件过滤器

写在前面 Qt中的事件过滤器(Event Filter)是一种机制,用于拦截并处理特定类型的事件。但和Qt–事件分发器一文中提到的事件分发器有些区别。 事件过滤器的工作原理 这里同样使用一个简单的示例图帮助理解: 这里假设有一个Widget父窗口,该…

服务间的通信(RestTemplate +Ribbon+Feign):

服务之间的依赖: 其实根据上图我们发现会员管理服务其实是依赖于我们图书的这个服务的,那么为什么要依赖于图书这个服务呢,因为会员服务想要进行借阅图书的时候,必须要对图书模块的图书的库存等做校验才可以,所以membe…

在 Kubernetes 上实现高速应用交付

原文作者:NGINX 原文链接:在 Kubernetes 上实现高速应用交付 转载来源:NGINX 官方网站 NGINX 唯一中文官方社区 ,尽在 nginx.org.cn 运行于 Kubernetes 之上的应用需要一个经过验证的生产级应用交付解决方案。NGINX Ingress Cont…

边缘计算AI硬件智能分析网关V1版的接入流程与使用步骤

我们的AI边缘计算网关硬件——智能分析网关目前有两个版本:V1版与V2版,两个版本都能实现对监控视频的智能识别和分析,支持抓拍、记录、告警等,在AI算法的种类上和视频接入上,两个版本存在些许的区别。V1的基础算法有人…

【ChatGPT】《吴恩达 x OpenAI Prompt Engineering教程中文笔记》- 知识点目录

《吴恩达 x OpenAI Prompt Engineering教程中文笔记》 🐳 在开始编写提示词之前的一些设置 不同的temperature会影响模型的理性和想象力,这里告诉我们: Low:例如GPT4,更加适合确定性的问答任务Hight:例如…

non-protected broadcast场景分析及解决

non-protected broadcast场景分析及解决 在两个app之间互相送消息使用BroadcastReceiver,有时在运行过程中在logcat工具中会发现大片的飘红消息。 要消除这些错误信息,需要在广播的 Sender 和 Receiver 做部分的修改。 错误信息分析 由于 发送端 的 M…

忆享聚焦|ChatGPT、AI、网络数字、游戏……近期热点资讯一览

“忆享聚焦”栏目第十四期来啦!本栏目汇集近期互联网最新资讯,聚焦前沿科技,关注行业发展动态,筛选高质量讯息,拓宽用户视野,让您以最低的时间成本获取最有价值的行业资讯。 目录 行业资讯 1.科技部部长王志…

上海亚商投顾:沪指跌1.28%失守年线 大金融板块集体走弱

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪 三大指数今日继续调整,沪指超1%逼近3200点,尾盘失守年线,创业板指较为抗跌。大…

你收藏了那些实用工具类网站?

今天来给大家分享几个众多网友们推荐的,宝藏工具类网站 uIGradients https://uigradients.com/#Flickr 专业的渐变色配色工具网站,配色什么的非常全,也可以按照自己的想法来选择搭配,还能直接获得对应渐变配色的CSS代码&#xff…

水表自动抄表系统有什么功能

水表自动抄表系统是一种新型的智能化管理系统,它可以自动采集水表的数据,并且实时上传到管理平台,实现了水表的实时监测和管理。该系统具有以下几个主要功能: 1.自动抄表功能 水表自动抄表系统可以实现自动采集水表的数据&#x…

【学习笔记】Windows 下线程同步之互斥锁

目录 前言环境简介相关函数CreateMutex Wait 函数ReleaseMutexCloseHandle 其他互斥锁的名字未命名互斥锁的同步互斥锁的意外终止临界区对象 参考 前言 本文所涉及的同步主要描述在 Windows 环境下的机制,和 Linux 中的同步机制有一定的联系,但注意并不…

小猫踩球-第14届蓝桥杯省赛Scratch中级组真题第2题

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第137讲。 小猫踩球,本题是2023年5月7日举行的第14届蓝桥杯省赛Scratch图形化编程中级组真题第2题&#xf…

智慧档案馆一体化监控系统设计所需要的10条依据

1.科学性 本项目目标定位为:以科学技术为基础,依靠先进的设备和优越的设计理念、科学客观的管理,利用信息化管理及相关最新技术,将库房实际环境与存储技术、计算机技术、无线自动控制技术、通讯与信息处理技术等先进技术相结合&a…

Python appium搭建app自动化测试环境

目录 前言 App自动化环境安装 安装安卓开发工具 安装模拟器 前言 appium做app自动化测试,环境搭建是比较麻烦的。 也是很多初学者在学习app自动化之时,花很多时间都难跨越的坎。 但没有成功的环境,就没有办法继续后续的使用。 在app自…

面试技术点

一、对热修复、插件化、模块化、组件化有一定研究。 1、模块化 将共享部分或业务模块抽取出来形成独立module。 2、组件化 基于模块化,核心思想是角色的转换,在打包时是library,分离独立的业务组件如微信朋友圈。 3、热修复和插件化种类、…

在Kaggle上使用Stable Diffusion进行AI绘图

前言 因为使用Stable Diffusion进行AI绘图需要GPU,这让其应用得到了限制本文介绍如何在Kaggle中部署Stable Diffusion,并使用免费的P100 GPU进行推理(每周可免费使用30小时),部署好后可以在任意移动端使用。本项目在s…

2023全球最佳医院榜单及简要介绍

作为医学类的访问学者、博士后及联合培养博士们,都希望到世界知名医院进行临床研修交流及科研学习。2023 年世界最佳医院排行榜的发布为申请者提供了目标平台,现知识人网小编整理刊出。 近期,《新闻周刊》和全球数据公司 Statista 推出了2023…

拿了7家大厂offer后,整理出来的笔记.....

我第一次接触自动化是在2016年。那时刚毕业一年有余,组内一直做手工功能测试,大概在2018年9月,部门领导要求测试组引入自动化。组内之前从没有开展过任何自动化,测试主管安排了一个刚入职不久的研究生同事去研究。 当时自己内心还…

UniApp原生插件制作

参考1:UniApp官网-原生插件开发 参考2:uniapp Android 原生插件开发 一、下载安装Android Studio 本部分不在赘述 二、下载UniApp离线SDK 下载地址:Android 离线SDK - 正式版 | uni小程序SDK 三、解压下载文件,并导入Androi…

蓝精灵协会:如何将传统 IP 融入 Web3

作者:Cedric Hervet,联合创始人,创意总监 我和许多项目合作过,并且担任了近 30 年的艺术总监和创意总监。我的方法一直是创造同质化的宇宙,把观众带入并使他们产生梦想。但我也曾系统地寻找过那份额外的感动&#xff1…