深度学习实验第T2周:彩色图片分类

news2024/11/27 4:32:32
>- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客**
>- **🍖 原作者:[K同学啊](https://mtyjkh.blog.csdn.net/)**

目录

一、前言

目标

二、我的环境(依旧是在云gpu)

三、前期准备

1.设置GPU

import tensorflow as tf
gpus = tf.config.list_physical_devices("GPU")

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

 

2.导入数据(直接下载的自带的数据集)

import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt

(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

3.归一化

# 将像素的值标准化至0到1的区间内。
train_images, test_images = train_images / 255.0, test_images / 255.0

train_images.shape,test_images.shape,train_labels.shape,test_labels.shape

 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网络

关于卷积层:可参考【知识储备】部分

池化层

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

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

  • 平面结构图(可单击放大查看)

 

  • 立体结构图(可单击放大查看)
model = models.Sequential([
    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)), #卷积层1,卷积核3*3
    layers.MaxPooling2D((2, 2)),                   #池化层1,2*2采样
    layers.Conv2D(64, (3, 3), activation='relu'),  #卷积层2,卷积核3*3
    layers.MaxPooling2D((2, 2)),                   #池化层2,2*2采样
    layers.Conv2D(64, (3, 3), activation='relu'),  #卷积层3,卷积核3*3
    
    layers.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=10, 
                    validation_data=(test_images, test_labels))

 

七预测和模型评估

预测

plt.imshow(test_images[1])

模型评估

import matplotlib.pyplot as plt

plt.plot(history.history['accuracy'], label='accuracy')
plt.plot(history.history['val_accuracy'], label = 'val_accuracy')
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)

八、知识点详解和总结

1. 数据集介绍

CIFAR-10是一个广泛使用的彩色图像数据集,特别适合于机器学习和计算机视觉研究,尤其是在卷积神经网络的训练和评估中。它包含60,000张32x32像素的彩色图像,分为10个类别,每个类别包含6,000张图像,其中5,000张用于训练,1,000张用于测试。这些类别包括飞机、汽车、鸟类、猫、鹿、狗、蛙、马、船和卡车。图像数据是RGB三通道的,每个通道的像素值范围是0到255。CIFAR-10数据集常用于图像分类任务,是评估深度学习模型性能的标准基准之一由于图像尺寸较小,分类任务可能面临挑战,尤其是在区分相似类别的图像时。数据集中的图像具有多样性,包括不同的背景、光照条件和角度。在TensorFlow中,可以通过`tensorflow.keras.datasets.cifar10.load_data()`函数轻松下载和加载CIFAR-10数据集,加载后得到的变量包括训练集图像`train_images`、训练集标签`train_labels`、测试集图像`test_images`和测试集标签`test_labels`,它们的形状分别是(50,000, 32, 32, 3)、(50,000,)、(10,000, 32, 32, 3)和(10,000,)。本次数据集直接加载的,速度比较慢。

2. 神经网络程序说明

数据集--选择网络模型--构建网络--编译-训练--预测--可视化得出结果

 

3.模型结构说明

本模型是一个顺序模型(Sequential model),由多个层次的卷积层、池化层、Flatten层和全连接层组成。3个卷积层两个池化层模型以一个具有32个过滤器的卷积层开始,其卷积核大小为3x3,激活函数为ReLU,输入图像的尺寸为32x32x3。接着是一个2x2的池化层,用于降低特征图的空间尺寸。模型继续使用另一个具有64个过滤器的卷积层,同样使用3x3的卷积核和ReLU激活函数,然后再次使用2x2的池化层。第三层卷积层与第二层相同,也是64个过滤器和3x3的卷积核,但不再跟随着池化层。之后,模型使用Flatten层将多维的特征图展平为一维向量,以便输入到全连接层。第一个全连接层有64个神经元,也使用ReLU激活函数。最后,模型以一个具有10个神经元的全连接层作为输出层,对应于CIFAR-10数据集中的10个类别。通过`model.summary()`函数,我们可以打印出模型的详细结构,包括每层的输出形状和参数数量。

4.编译

本模型使用Adam优化器进行训练,该优化器能够自适应地调整学习率以加快收敛速度。损失函数采用SparseCategoricalCrossentropySparseCategoricalCrossentropy是用于多分类问题的损失函数,当标签为整数时使用,且设置from_logits=True,意味着模型的输出层将输出未经softmax处理的原始logits,由损失函数内部负责应用softmax。评估模型时,我们关注的主要指标是准确率,即正确预测的样本数占总样本数的比例。通过编译模型,我们为模型的训练和评估阶段设定了优化算法、损失函数和评估指标。便于之后的训练。

编译模型是设置模型训练配置的重要步骤,它告诉模型如何进行优化、如何计算损失以及如何评估性能。一旦模型被编译,就可以使用model.fit()方法来训练模型,使用model.evaluate()方法来评估模型。

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

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

相关文章

煤安防爆手机在煤矿井下使用时需要符合什么标准

煤安防爆手机在煤矿井下使用时,需符合严格的防爆安全标准,如煤安MA防爆合格证,以确保在易燃易爆环境中安全无虞。同时,手机还需具备防尘防水、抗冲击等环境适应性要求,以及优异的通信性能,以满足煤矿工作的…

python 获取遮挡窗口界面并操作窗口

有时候我们需要程序自动化帮我们处理一些事情,这时候我们会想到使用按键精灵等一些可以模拟人工操作的软件代替我们劳动,但是,这种操作有个前提就是需要将操作界面置于最顶层,这样就会影响我们做其他事情,这时我们就不希望操作界面置于最外层,影响我们做其他操作。 今天…

JAVA毕业设计145—基于Java+Springboot+vue+uniapp的驾校预约小程序(源代码+数据库+15000字论文)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvueuniapp的驾校预约小程序(源代码数据库15000字论文)145 一、系统介绍 本项目前后端分离,分为用户、教练、管理员三种角色 1、用户: …

技术分享:分布式数据库DNS服务器的架构思路

DNS是企业数字化转型的基石。伴随微服务或单元化部署的推广,许多用户也开始采用分布式数据库将原来的单体数据库集群服务架构拆分为大量分布式子服务集群,对应不同的微服务或服务单元。本文将从分布式数据库DNS服务器的架构需求、架构分析两方面入手&…

今天起,全球所有Mac用户可免费安装桌面版ChatGPT

在 macOS 上,用户在安装新的 ChatGPT 应用程序后,使用 Option Space 的键盘组合即可快速调用 ChatGPT。 刚刚,OpenAI 宣布推出适用于 macOS 的应用程序。 虽然 Mac 应用程序尚未在 Mac App Store 中提供,但用户可以直接从 Open…

计算机网络之OSI七层体系结构

目录 1.物理层 1.1物理层组成 1.2物理层功能 1.3物理层服务 1.4物理层标准 1.5物理层接口 2.数据链路层 2.1基于物理层的问题 2.2数据链路层功能 2.3数据链路层服务 2.4数据链路层协议 3.网络层 3.1基于DL层的问题 3.2网络层功能 3.3网络层服务 3.4网络层协议 …

饮料添加剂光照试验太阳光模拟器试验箱

饮料添加剂光照试验是一种用来评估饮料在光照条件下稳定性的实验方法。这个过程通常包括以下几个步骤: 样品准备: 首先,将饮料密封在市售包装或近似市售包装中,确保包装的完整性和密封性。 光照条件设置: 将封装好的…

开源大模型RAG企业本地知识库问答机器人-ChatWiki

ChatWiki ChatWiki是一款开源的知识库 AI 问答系统。系统基于大语言模型(LLM )和检索增强生成(RAG)技术构建,提供开箱即用的数据处理、模型调用等能力,可以帮助企业快速搭建自己的知识库 AI 问答系统。 开…

idea2024使用springboot3.x系列新建java项目,使用jdk17,启动项目报错

身为一名开发人员,敲代码无数,竟被一个小小启动给我卡了大半天,太丢脸了 报错一:Field infoSysRepository in com.erectile.Impl.PersonalInfoServiceImpl required a bean of type ‘com.erectile.jpa.repository.InfoSysReposit…

短视频视频配:成都柏煜文化传媒有限公司

短视频视频配:​艺术与技术的完美融合 在短视频盛行的当下,一个优秀的短视频作品不仅仅依赖于精彩的内容,更需要在视频配上做足功夫。视频配,作为短视频的重要组成部分,涵盖了音效、配乐、字幕等多个方面,…

Spring Boot中 CommandLineRunner 与 ApplicationRunner作用、区别

CommandLineRunner 和 ApplicationRunner 是 Spring Boot 提供的两种用于在应用程序启动后执行初始化代码的机制。这两种接口允许你在 Spring 应用上下文完全启动后执行一些自定义的代码,通常用于执行一次性初始化任务,如数据库预填充、缓存预热等。 Co…

Docker 部署 MariaDB 数据库 与 Adminer 数据库管理工具

文章目录 MariaDBmariadb.cnf开启 binlog Adminerdocker-compose.ymlAdminer 连接 MariaDB MariaDB MariaDB是一个流行的开源关系型数据库管理系统(RDBMS),它是MySQL的一个分支和替代品。 官网:https://mariadb.com/镜像&#xff…

拆分盘投资策略解析:机制、案例与风险考量

一、引言 随着互联网技术的迅猛发展和金融市场的不断创新,拆分盘这一投资模式逐渐崭露头角,成为投资者关注的焦点。它基于特定的拆分策略,通过调整投资者持有的份额和单价,实现了看似稳健的资产增长。本文旨在深入探讨拆分盘的运…

黑芝麻科技A1000简介

文章目录 1. A1000 简介2. 感知能力评估3. 竞品对比4. 系统软件1. A1000 简介

父元素hover子元素显示之opacity

碰到的几种问题: opacity 占实际位置, 会触发父元素的hover事件。 尝试了一下把菜单的pointer-events: none;但是鼠标移动不到菜单上去了,移动到菜单上也会不显示。 解决方法: opacity 和 visibility一起使用。 .dropdown .dropdown-menu …

OpenHarmony南向驱动开发实战-Input

简介 该仓下主要包含Input模块HDI(Hardware Driver Interface)接口定义及其实现,对上层输入服务提供操作input设备的驱动能力接口,HDI接口主要包括如下三大类: InputManager:管理输入设备,包括…

11集干货必看!在Docker上编译tensorFlow Lite MCU例子工程-《MCU嵌入式AI开发笔记》

【11集在Docker上编译tensorFlow Lite MCU例子工程-《MCU嵌入式AI开发笔记》】 这一集咱们一步一步的在doc下面编译TensorFlow Lite的例程 https://tensorflow.google.cn/lite/tutorials?hlzh-cn 进入这个例子: https://codelabs.developers.google.cn/codelabs/…

《Attention is all you need》通俗解读,彻底理解版:part2

这是《Attention Is All You Need》通俗解读的第2篇,上一篇见这里。 本篇解读模型结构的编码器和解码器,对应于论文的 3.1 小节。 这一部分在论文中作者写的并不长,很多内容没有展开来讲。 虽然对于这一类具有原创架构的论文而言&#xff…

open-chat-video-editor:开源短视频生成和编辑工具,以及抖音|TikTok 的移动端短视频项目

open-chat-video-editor:开源短视频生成和编辑工具,以及抖音|TikTok 的移动端短视频项目。 open-chat-video-editor:开源短视频生成和编辑工具 简介 Open Chat Video Editor是开源的短视频生成和编辑工具,整体技术框架如下&…

微盟×爱分析发布《2024年企业AI应用趋势洞察报告》

2023年,国内生成式AI爆发式发展,引发大模型创业热潮。随着大模型的竞争从技术往商业化应用方面延伸,企业级AI应用也迎来了快速发展。6月26日,微盟与爱分析联合发布了《2024年企业AI应用趋势洞察报告》(以下简称《报告》…