第30周:彩色图片分类(Tensorflow实战第二周)

目录

前言

一、前期工作

1.1 设置GPU

1.2 导入数据

1.3 数据归一化

1.4 数据可视化

二、构建CNN网络

2.1 基本概念

2.2 代码实现

三、编译

四、训练模型

五、预测

六、模型评估

总结


前言

  • 🍨 本文为[🔗365天深度学习训练营]中的学习记录博客
  • 🍖 原作者:[K同学啊]

说在前面

1)本周任务:学习如何编写一个完整的深度学习程序;了解分类彩色图片和灰度图片有什么区别;测试集accuracy到达72%

2)运行环境:Python3.6、Pycharm2020、tensorflow2.4.0


一、前期工作

1.1 设置GPU

代码如下:

# 1.1 设置GPU
import tensorflow as tf
import matplotlib.pyplot as plt
gpus = tf.config.list_physical_devices("GPU")if gpus:gpu0 = gpus[0] #如果有多个GPU,仅使用第0个GPUtf.config.experimental.set_memory_growth(gpu0, True) #设置GPU显存用量按需使用tf.config.set_visible_devices([gpu0],"GPU")

1.2 导入数据

代码如下:

# 1.2 导入数据
from tensorflow.keras import datasets, layers, models
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

1.3 数据归一化

代码如下:

# 1.3 归一化
# 将像素的值标准化至0到1的区间内。
train_images, test_images = train_images / 255.0, test_images / 255.0
print(train_images.shape, test_images.shape,train_labels.shape, test_labels.shape)

打印输出:(50000, 32, 32, 3) (10000, 32, 32, 3) (50000, 1) (10000, 1)

1.4 数据可视化

代码如下:

#1.4 可视化
class_names = ['airplane', 'automobile', 'bird', 'cat','deer', 'dog', 'frog', 'horse', 'ship', 'truck']plt.figure(figsize=(20,10))
for i in range(20):plt.subplot(5, 10, i+1)plt.xticks([])plt.yticks([])plt.grid(False)plt.imshow(train_images[i], cmap=plt.cm.binary)plt.xlabel(class_names[train_labels[i][0]])
plt.show()

打印输出:

二、构建CNN网络

2.1 基本概念

池化层对提取到的特征信息进行降维,一方面使特征图变小,简化网络计算复杂度;另一方面进行特征压缩,提取主要特征,增加平移不变性,减少过拟合风险。但其实池化更多程度上是一种计算性能的一个妥协,强硬地压缩特征的同时也损失了一部分信息,所以现在的网络比较少用池化层或者使用优化后的如SoftPool。

池化层包括最大池化层(MaxPooling)和平均池化层(AveragePooling),均值池化对背景保留更好,最大池化对纹理提取更好)。同卷积计算,池化层计算窗口内的平均值或者最大值。例如通过一个 2*2 的最大池化层,其计算方式如下:

模型结构图如下:

2.2 代码实现

代码如下:

# 二、构建CNN网络
model = models.Sequential([layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),  # 卷积层1,卷积核3*3layers.MaxPooling2D((2, 2)),  # 池化层1,2*2采样layers.Conv2D(64, (3, 3), activation='relu'),  # 卷积层2,卷积核3*3layers.MaxPooling2D((2, 2)),  # 池化层2,2*2采样layers.Conv2D(64, (3, 3), activation='relu'),  # 卷积层3,卷积核3*3layers.Flatten(),  # Flatten层,连接卷积层与全连接层layers.Dense(64, activation='relu'),  # 全连接层,特征进一步提取layers.Dense(10)  # 输出层,输出预期结果
])model.summary()  # 打印网络结构

打印输出:

三、编译

代码如下:

# 三、编译
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])

四、训练模型

代码如下:

# 四、训练模型
history = model.fit(train_images, train_labels, epochs=15,validation_data=(test_images, test_labels))

打印输出:

Epoch 1/15
1563/1563 [==============================] - 14s 9ms/step - loss: 1.7816 - accuracy: 0.3393 - val_loss: 1.2449 - val_accuracy: 0.5547
Epoch 2/15
1563/1563 [==============================] - 13s 9ms/step - loss: 1.1769 - accuracy: 0.5798 - val_loss: 1.0685 - val_accuracy: 0.6210
Epoch 3/15
1563/1563 [==============================] - 14s 9ms/step - loss: 0.9999 - accuracy: 0.6487 - val_loss: 0.9839 - val_accuracy: 0.6495
Epoch 4/15
1563/1563 [==============================] - 14s 9ms/step - loss: 0.8891 - accuracy: 0.6879 - val_loss: 0.9301 - val_accuracy: 0.6766
Epoch 5/15
1563/1563 [==============================] - 14s 9ms/step - loss: 0.8108 - accuracy: 0.7143 - val_loss: 0.8857 - val_accuracy: 0.6947
Epoch 6/15
1563/1563 [==============================] - 14s 9ms/step - loss: 0.7571 - accuracy: 0.7332 - val_loss: 0.8756 - val_accuracy: 0.6972
Epoch 7/15
1563/1563 [==============================] - 14s 9ms/step - loss: 0.7010 - accuracy: 0.7553 - val_loss: 0.8619 - val_accuracy: 0.7076
Epoch 8/15
1563/1563 [==============================] - 14s 9ms/step - loss: 0.6609 - accuracy: 0.7689 - val_loss: 0.8532 - val_accuracy: 0.7094
Epoch 9/15
1563/1563 [==============================] - 14s 9ms/step - loss: 0.6190 - accuracy: 0.7837 - val_loss: 0.8639 - val_accuracy: 0.7116
Epoch 10/15
1563/1563 [==============================] - 14s 9ms/step - loss: 0.5839 - accuracy: 0.7942 - val_loss: 0.8705 - val_accuracy: 0.7124
Epoch 11/15
1563/1563 [==============================] - 14s 9ms/step - loss: 0.5361 - accuracy: 0.8089 - val_loss: 0.8650 - val_accuracy: 0.7137
Epoch 12/15
1563/1563 [==============================] - 14s 9ms/step - loss: 0.5089 - accuracy: 0.8208 - val_loss: 0.8719 - val_accuracy: 0.7175
Epoch 13/15
1563/1563 [==============================] - 14s 9ms/step - loss: 0.4602 - accuracy: 0.8381 - val_loss: 0.9218 - val_accuracy: 0.7135
Epoch 14/15
1563/1563 [==============================] - 14s 9ms/step - loss: 0.4410 - accuracy: 0.8457 - val_loss: 0.9610 - val_accuracy: 0.7150
Epoch 15/15
1563/1563 [==============================] - 14s 9ms/step - loss: 0.4147 - accuracy: 0.8511 - val_loss: 0.9712 - val_accuracy: 0.7118
 

五、预测

代码如下:

# 五、预测
plt.imshow(test_images[1])
import numpy as np
pre = model.predict(test_images)
print(class_names[np.argmax(pre[1])])

打印输出:ship

六、模型评估

代码如下:

# 六、模型评估
plt.figure(figsize=(10,5))
plt.plot(history.history['accuracy'], label='accuracy')
plt.plot(history.history['val_accuracy'], label='val_accuracy')
plt.yticks(fontsize=10)
plt.xticks(fontsize=10)
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.ylim([0.5, 1])
plt.legend(loc='lower right')
plt.show()test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2)
print(test_acc)

打印输出:

0.7117999792098999

修改优化器为SGD,这时输出的测试集准确率为0.6492000222206116,所以对于本文任务而言,Adam优化器更适用;又继续修改了epoch=20,准确率达到了0.717199981212616


总结

  • 对基于tensorflow框架下搭建深度学习模型的框架有了进一步的了解
  • 分类彩色图片和灰度图片的区别主要体现在以下几个方面:

1)数据维度

彩色图片:通常由三种颜色通道组成(如RGB:红、绿、蓝),每个通道包含了图像的亮度信息,形成一个三维的数据结构。每个像素用三组值表示。

灰度图片:只有一个通道,表示图像的亮度,通常范围是0(黑)到255(白)之间的单一数值。每个像素只用一个值表示。

2)信息丰富度

彩色图片:含有更多的信息和细节,能够传达颜色的变化、色彩的深度和丰富性,适合表现复杂的场景和对象。

灰度图片:信息相对简单,主要通过不同的亮度级别来表现图像的结构和形状,通常用在需要关注形状和轮廓的应用中。

3)处理和计算复杂度

彩色图片:由于亚像素层面上的数据量大,处理和计算通常更加复杂,需要较多的计算资源和时间。

灰度图片:计算更简单,处理速度较快,因为只有一个通道的数据

  • 通过调整训练的epoch提高了测试集上的准确率

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

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

相关文章

【Linux】信号

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12625432.html 目录 信号和信号量 信号 信号的处理 信号捕捉 信号的产生 系统调用 signal rais…

【国内中间件厂商排名及四大中间件对比分析】

国内中间件厂商排名 随着新兴技术的涌入,一批国产中间件厂商破土而出,并在短时间内迅速发展,我国中间件市场迎来洗牌,根据市占率,当前我国中间件厂商排名依次为:东方通、宝兰德、中创股份、金蝶天燕、普元…

【题解】CF2033G

题目 CF2033G 分析 一道很显然是树形dp的题,但非常恶心QwQ。   先不管复杂度,找找递推关系,一种很直接的想法如下(我觉得是错误的): d p [ i ] [ k ] m a x ( d p [ f a i ] [ k − 1 ] , d p [ s o …

SpringBoot之定时任务

1. 前言 本篇博客是个人的经验之谈,不是普适的解决方案。阅读本篇博客的朋友,可以参考这里的写法,如有不同的见解和想法,欢迎评论区交流。如果此篇博客对你有帮助,感谢点个赞~ 2. 场景 我们讨论在单体项目&#xff0c…

【日志】力扣58.最后一个单词的长度//14.最长公共前缀//28. 找出字符串中第一个匹配项的下标

2024.11.6 【力扣刷题】 58. 最后一个单词的长度 - 力扣(LeetCode)https://leetcode.cn/problems/length-of-last-word/?envTypestudy-plan-v2&envIdtop-interview-150 int lengthOfLastWord(char* s) {int count 0;for (int i strlen(s) - 1; i…

智能家居的未来:AI让生活更智能还是更复杂?

内容概要 智能家居的概念源于将各种家居设备连接到互联网,并通过智能技术进行控制和管理。随着人工智能的迅速发展,这一领域也迎来了前所未有的机遇。从早期简单的遥控器到如今可以通过手机应用、语音助手甚至是环境感应进行操作的设备,智能…

1. 初步认识 Java 虚拟机

一、前言 其实一直都想系统性的学习一下 JVM,尝试过很多次,最终没能坚持下来,现在已经工作多年,发现对于 JVM这块知识还是很薄弱,不利于职业长远发展,并且之前掌握的都是一些零散的知识,没能形…

数据结构之二叉树的链式结构——递归的暴力美学

1. 实现链式的二叉树结构 我们之前用顺序表里面数组的底层结构实现了二叉树中堆的结构,但是不是所有的二叉树都具有着堆的性质,所以我们现在需要一个链式结构来描述普遍的二叉树。其底层结构类似一个链表,但是每一个结点由单个区域&#xff…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-31

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-31 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-31目录1. Large Language Models for Manufacturing摘要创新点算法模型实验效果(包含重要数据与结论)推荐…

利用SpringBoot构建城镇住房保障平台

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理城镇保障性住房管理系统的相关信息成为必然…

【笔记】扩散模型(九):Imagen 理论与实现

论文链接:Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding 非官方实现:lucidrains/imagen-pytorch Imagen 是 Google Research 的文生图工作,这个工作并没有沿用 Stable Diffusion 的架构,而是级…

Windows下载安装Ollama本地运行大模型,新手详细

目录 1. 下载安装Ollama2. 环境配置- 关闭开机自启动(可选):- 配置环境变量(必须):- 配置端口(可选):- 允许浏览器跨域请求(可选): 3.…

代码随想录算法训练营Day55 | 图论理论基础、深度优先搜索理论基础、卡玛网 98.所有可达路径、797. 所有可能的路径、广度优先搜索理论基础

目录 图论理论基础 深度优先搜索理论基础 卡玛网 98.所有可达路径 广度优先搜索理论基础 图论理论基础 图论理论基础 | 代码随想录 图的基本概念 图的种类 大体分为有向图和无向图。 图中的边有方向的是有向图: 图中的边没有方向的是无向图: 图…

牛客练习赛131(dp,dfs,bfs,线段树维护等差数列)

文章目录 牛客练习赛131(dp,dfs,bfs,线段树维护等差数列)A. 小H学语文B. 小H学数学(dp、偏移值)C. 小H学生物(DFS、树上两点间路径的距离)D. 小H学历史(BFS)E. 小H学物理…

干货分享篇:Air780EP的硬件设计原理全解析(上)

一、绪论 Air780EP是一款基于移芯EC718P平台设计的LTE Cat 1无线通信模组。支持FDD-LTE/TDD-LTE的4G远距离无线传输技术。另外,模组提供了USB/UART/I2C等通用接口满足IoT行业的各种应用诉求。 二、综述 2.1 型号信息 表格 1:模块型号列表 2.2 主要性能…

Python将Word文档转为PDF

将word转pdf,只能使用办公工具,但是这些工具大都是收费。因此想用python 将word转pdf,发现很好用特此记录下。方法一:使用docx2pdf模块将docx文件转为pdf 要实现这样的功能,需要用到的就是 docx2pdf 这个python第三方库。对于doc…

无惧任天堂的法律威胁:Switch模拟器Ryujinx v1.2.72版发布

此前任天堂向多个提供 Nintendo Switch 模拟器项目发送律师函甚至直接起诉,要求这些项目立即停止更新、删除以及向任天堂提供经济赔偿。其中 Ryujinx 项目已经在 2024 年 10 月 1 日因任天堂的法律威胁而放弃项目,不过很快就有分叉版本出现,这…

JavaWeb——Web入门(6/9)-HTTP协议:协议解析(客户端的 HTTP 协议解析、服务端的 HTTP 协议解析、Web服务器的作用)

目录 概述 客户端的 HTTP 协议解析 服务端的 HTTP 协议解析 Web服务器的作用 概述 了解完 HTTP 协议的请求数据格式以及响应数据格式之后,接下来我们来讲了解 HTTP 协议的解析。 HTTP 协议的解析分为客户端和服务端两个部分,客户端浏览器中内置了解…

操作系统-实验报告单(2)

目录 1 实验目标 2 实验工具 3 实验内容、实验步骤及实验结果 一、自定义操作系统并启动 1. 最简单操作系统的编写并生成镜像文件 2.虚拟机启动操作系统 【思考题:1、仔细阅读helloos.nas,结合操作系统启动过程尝试分析它的作用;2、若…

城镇住房保障:SpringBoot系统优化技巧

3系统分析 3.1可行性分析 通过对本城镇保障性住房管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本城镇保障性住房管理系统采用SSM框架,JA…