详细介绍 CNN 完成 CIFAR 图像分类任务

准备工作

这里用到的是:

  • tensorflow-cpu 2.4 版本
  • python 3.8 版本
  • anaconda 自带的 jupyter notebook

本文大纲

  1. 加载、展示、处理 CIFAR 图像数据
  2. 搭建 CNN 模型架构
  3. 编译、训练模型
  4. 测试模型

加载、展示、处理 CIFAR 图像数据

(1)这里国内下载数据可能会报错,所以需要提前在这里下载好数据,然后将压缩包名字改成 cifar-10-batches-py.tar.gz ,然后放到路径:你的主目录/.keras/datasets 下。

(2)CIFAR10 数据集包含 10 个种类,共 60000 张彩色图片,每类图片有 6000 张。此数据集中 50000 张图片被作为训练集,剩余 10000 张图片作为测试集。每个种类的图片集之间相互独立。

(3)我们首先通过 datasets 读取到 CIFAR10 数据集,结果分成了两部分,训练集和测试集,每份数据集中有图片及其对应的标签。我们首先对所有图片数据进行归一化处理,这么做的好处有两点,一是能够使数据有相同的分布,保证不同的图像经过 CNN 后提取的特征的分布基本上趋于一致,梯度下降就很快,进而加快模型收敛,另外可能在一定程度上提升模型的精度。

import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt
from tensorflow.keras import regularizers(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()
train_images, test_images = train_images / 255.0, test_images / 255.0

(4)本数据集中的 10 中分类分别是 [‘airplane’, ‘automobile’, ‘bird’, ‘cat’, ‘deer’, ‘dog’, ‘frog’, ‘horse’, ‘ship’, ‘truck’],在这里我们随便展现出来了 4 张图片,虽然有点模糊,但是大体是可以区分出来所属类别。

class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
plt.figure(figsize=(4,4))
for i in range(100,104):plt.subplot(2,2,i+1-100)plt.xticks([])plt.yticks([])plt.grid(False)plt.imshow(train_images[i])plt.xlabel(class_names[train_labels[i][0]])
plt.show()

image.png

搭建 CNN 模型架构

这里主要是介绍模型架构组成,主要三个特征提取块,每个块中有卷积层、批正则化层、最大池化层,另外最后加入了 Dropout 层、全连接层、分类输出层,每个特征提取块的详细情况都一样,以第一个特征提取块为例说明如下:

  • 第一层主要是接收大小为 (32, 32, 3) 的图片,这里的前两个维度是每张图片的长款像素数量,第三个维度是每个像素点的三个颜色通道,这里主要使用了 64 个大小都为 (3, 3) 的卷积核来完成图像的特征提取工作,总共的可训练参数有个。

  • 第二层主要是过了防止过拟合设置批正则化,它先对数据做平移和伸缩变换,将数据伸缩到固定区间范围,其次可以加快模型训练时的收敛速度,使得模型训练过程更加稳定,避免梯度爆炸或者梯度消失,另外还能起到一定的正则化作用,现在几乎不用 Dropout 。其实这里我有个问题,看下面的模型架构图中每个批正则化都有参数,这个是怎么算出来的呢?还有为什么不可训练的参数有 512 个?有知道的请教教我

  • 第三层主要是进行了二维的最大池化操作,池化窗口大小为 (2, 2), 池化层可以有效的缩小特征矩阵的尺寸,从而减少最后连接层的中的参数数量。所以加入池化层也可以加快计算速度和防止过拟合的作用。

  • 后面使用了 Flatten 将每张图片的多维特征,压缩成一个长维度的特征,我们在进行全连接层之前还加入了 Dropout 就是为了防止过拟合,最后加入分类输出层进行类型 logit 的预测。

      model = models.Sequential([layers.Conv2D(64, (3, 3),  activation='relu', input_shape=(32, 32, 3)),layers.BatchNormalization(),layers.MaxPooling2D((2, 2)),layers.Conv2D(128, (3, 3), activation='relu'),layers.BatchNormalization(),layers.MaxPooling2D((2, 2)),layers.Conv2D(64, (3, 3), activation='relu'),layers.BatchNormalization(),layers.MaxPooling2D((2, 2)),layers.Flatten(),layers.Dropout(0.5),layers.Dense(32, activation='relu'),layers.Dense(10)])model.summary()

结果打印:

Model: "sequential_6"
_________________________________________________________________Layer (type)                Output Shape              Param #   
=================================================================conv2d_21 (Conv2D)          (None, 30, 30, 64)        1792      batch_normalization_3 (Batc  (None, 30, 30, 64)       256       hNormalization)                                                 max_pooling2d_17 (MaxPoolin  (None, 15, 15, 64)       0         g2D)                                                            conv2d_22 (Conv2D)          (None, 13, 13, 128)       73856     batch_normalization_4 (Batc  (None, 13, 13, 128)      512       hNormalization)                                                 max_pooling2d_18 (MaxPoolin  (None, 6, 6, 128)        0         g2D)                                                            conv2d_23 (Conv2D)          (None, 4, 4, 64)          73792     batch_normalization_5 (Batc  (None, 4, 4, 64)         256       hNormalization)                                                 max_pooling2d_19 (MaxPoolin  (None, 2, 2, 64)         0         g2D)                                                            flatten_5 (Flatten)         (None, 256)               0         dropout_7 (Dropout)         (None, 256)               0         dense_10 (Dense)            (None, 32)                8224      dense_11 (Dense)            (None, 10)                330       =================================================================
Total params: 159,018
Trainable params: 158,506
Non-trainable params: 512

编译、训练模型

这里就是使用训练集和测试集进行模型的训练和验证,速度还是有点慢的,通过打印的结果我们可以看到,最后 accuracy 和 val_accuracy 都在正常进行,基本没有出现过拟合或者欠拟合的风险,只是模型的结构还是很单薄,所以最后的准确率只有 75% 上下,如果用其它专业的大模型,准确率应该在 98% 以上。

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))

结果打印:

Epoch 1/10
1563/1563 [==============================] - 110s 70ms/step - loss: 1.5976 - accuracy: 0.4294 - val_loss: 1.4839 - val_accuracy: 0.4570
Epoch 2/10
1563/1563 [==============================] - 110s 71ms/step - loss: 1.2001 - accuracy: 0.5744 - val_loss: 1.3931 - val_accuracy: 0.5108
......
Epoch 9/10
1563/1563 [==============================] - 114s 73ms/step - loss: 0.7181 - accuracy: 0.7515 - val_loss: 0.7916 - val_accuracy: 0.7275
Epoch 10/10
1563/1563 [==============================] - 112s 71ms/step - loss: 0.6840 - accuracy: 0.7612 - val_loss: 0.7671 - val_accuracy: 0.7367

这里主要展现的是整个训练过程中的,训练集和验证集各自准确率的发展趋势,一般我们可以从图中的曲线可以得知训练的整体情况,如果不符合预期可以进行数据或者模型或者参数的调整,如果符合预期,则可以进行下一步的推理或者预测。

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()

image.png

测试模型

使用测试集进行模型的测试工作,因为之前验证集和测试集用的是同一份数据,所以最后的准确率肯定和训练过程的最后的 val_accuracy 是一样的。那么到这里为止,使用卷积神经网络进行 CIFAR 图像的分类任务就告一段落了。

test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2)
print(test_acc)

结果打印:

313/313 - 5s - loss: 0.7671 - accuracy: 0.7367 - 5s/epoch - 15ms/step
0.7366999983787537

如何系统的去学习大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.2.1 什么是Prompt
    • L2.2.2 Prompt框架应用现状
    • L2.2.3 基于GPTAS的Prompt框架
    • L2.2.4 Prompt框架与Thought
    • L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
    • L2.3.1 流水线工程的概念
    • L2.3.2 流水线工程的优点
    • L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
    • L3.1.1 Agent模型框架的设计理念
    • L3.1.2 Agent模型框架的核心组件
    • L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
    • L3.2.1 MetaGPT的基本概念
    • L3.2.2 MetaGPT的工作原理
    • L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
    • L3.3.1 ChatGLM的特点
    • L3.3.2 ChatGLM的开发环境
    • L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
    • L3.4.1 LLAMA的特点
    • L3.4.2 LLAMA的开发环境
    • L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

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

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

相关文章

一.iOS核心动画 - 关于图层与视图

引言 Core Animation听起来会让人误以为它只是用来做动画的,但是事实上它是从Layer Kit库演变而来的,其中做动画的功能只是Core Animation特性的一小部分。 Core Animation是一个复核引起,它的作用就是尽可能快地组合屏幕上不同的显示内容&…

Python | Leetcode Python题解之第143题重排链表

题目: 题解: class Solution:def reorderList(self, head: ListNode) -> None:if not head:returnmid self.middleNode(head)l1 headl2 mid.nextmid.next Nonel2 self.reverseList(l2)self.mergeList(l1, l2)def middleNode(self, head: ListNo…

18.2 HTTP服务器-处理函数、响应404错误

1. 处理函数 处理来自客户端的请求,并回之以特定的响应,这是处理函数的主要任务。在处理函数中,我们通常会完成如下工作: 验证请求路径 http.Request.URL.Pathhttp.NotFound(...) 当请求没有对应的处理函数时,返回4…

Vue3【十六】TS中的接口、泛型,自定义类型

Vue3【十六】TS中的接口、泛型&#xff0c;自定义类型 TS中的接口、泛型&#xff0c;自定义类型 案例截图 目录结构 代码 app.vue <template><div class"app"><h1>你好世界! 我是App根组件</h1><Person /></div> </templat…

OpenAI官方Prompt工程指南详解!再也不怕写不好Prompt了!

使用AI聊天、AI写作、还是AI绘图等过程中Prompt具有重要意义。 那么Prompt要怎么写效果才好&#xff1f;有没有标准化的模板可以直接用&#xff1f; 有&#xff0c;OpenAI官方发布了一份提示词工程指南&#xff0c;该指南分享了6大策略即可让AI输出更好的结果。至此&#xff…

无线领夹麦克风哪个品牌性价比高?推荐领夹麦克风性价比最高品牌

当今的直播、短视频已经深深的融入到了我们的生活当中&#xff0c;很多小伙伴会通过拍摄短视频、Vlog来分享自己生活精彩的瞬间。不过录制视频时&#xff0c;如果单纯靠手机拾音&#xff0c;距离手机越远&#xff0c;声音越小越不清晰如果有噪音干扰&#xff0c;那更是“惨不忍…

ONVIF相关介绍

ONVIF致力于通过全球性的开放接口标准来推进网络视频在安防市场的应用,这一接口标准将确保不同厂商生产的网络视频产品具有互通性。2008年11月,论坛正式发布了ONVIF第一版规范——ONVIF核心规范1.0。随着视频监控的网络化应用,产业链的分工将越来越细。有些厂商专门做摄像头…

pytest中失败用例重跑

pip install pytest-rerunfailures 下载rerunfailures插件包 配置文件中加入命令 --reruns 次数 也可在命令行中pytest --rerun-failures2 可以在allure报告中看到重试效果

【Echarts系列】水平柱状图

【Echarts系列】水平柱状图 序示例数据格式代码 序 为了节省后续开发学习成本&#xff0c;这个系列将记录我工作所用到的一些echarts图表。 示例 水平柱状图如图所示&#xff1a; 数据格式 data [{name: 于洪区,value: 2736},{name: 新民市,value: 2844},{name: 皇姑区,…

C++:SLT容器-->queue

C:SLT容器-->queue 1. queue容器2. queue 常用接口 1. queue容器 先进先出队列允许从一端插入元素&#xff0c;从另一端删除元素队列中只有队头和队尾可以被外界使用&#xff0c;因此队列不允许有遍历行为队列中插入数据称为入队(push)&#xff0c;删除数据称为出队(pop) …

JS 实现动态规划

function getPaths(m, n) {// m * n 二维数组&#xff0c;模拟网格const map new Array(m)for (let i 0; i < m; i) {map[i] new Array(n)}// 如果只走第一行&#xff0c;就只有一条路径。所以第一行所有 item 都填充 1map[0].fill(1)// 如果只走第一列&#xff0c;也只有…

【vue3|第8期】深入理解Vue 3 computed计算属性

日期&#xff1a;2024年6月10日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

合约ABI探秘

EOA使用ABI调用 合约之间使用接口调用 自己写ABI&#xff0c;自己写接口 ABI探秘 EOA使用的ABI数据与合约间调用时调用者持有的接口时等价的&#xff0c;都是对合约函数签名的完整描述调用者使用ABI数据生成message中的calldata message上下文的变化 合约之间的调用也模拟…

8.11 矢量图层线要素单一符号使用六(光栅线)

文章目录 前言光栅线&#xff08;Raster Line&#xff09;QGis设置线符号为光栅线&#xff08;Raster Line&#xff09;二次开发代码实现光栅线&#xff08;Raster Line&#xff09; 总结 前言 本章介绍矢量图层线要素单一符号中光栅线&#xff08;Raster Line&#xff09;的使…

如何通过加密U盘 实现数据传输闭环管控?

加密U盘是用来保护存储在其中数据的安全的。通过加密技术&#xff0c;用户可以将其敏感文件和信息存储在U盘中&#xff0c;并设置密码或使用其他加密方法来防止未经授权的访问。这种安全措施可以防止数据泄露或盗窃&#xff0c;特别是在丢失或被盗的情况下&#xff0c;确保数据…

机床联网第一课

一、不是废话的废话 照例第一篇文章先介绍下整个专栏系列的内容和背景&#xff0c;这篇文章不涉及任何代码和技术知识&#xff0c;大家都能看得懂。 1、写作初衷 自入行接触设备数据采集、设备联网工作近十年&#xff0c;期间记不清有多少次有人请我帮忙去处理公司外部的项目&…

软件下载网站源码附手机版和图文教程

PHP游戏应用市场APP软件下载平台网站源码手机版 可自行打包APP&#xff0c;带下载统计&#xff0c;带多套模板&#xff0c;带图文教程&#xff0c;可以做软件库&#xff0c;也可以做推广app下载等等&#xff0c;需要的朋友可以下载 源码下载 软件下载网站源码附手机版和图文…

Android14之向build.prop添加属性(二百一十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP…

Vuepress 2从0-1保姆级进阶教程——标准化流程(Tailwindcss+autoprefixer+commitizen)

Vuepress 2 专栏目录【已完结】 1. 入门阶段 Vuepress 2从0-1保姆级入门教程——环境配置篇Vuepress 2从0-1保姆级入门教程——安装流程篇Vuepress 2从0-1保姆级入门教程——文档配置篇Vuepress 2从0-1保姆级入门教程——主题与部署 2.进阶阶段 Vuepress 2从0-1保姆级进阶教程—…

电影推荐系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;免费电影管理&#xff0c;付费电影管理&#xff0c;电影论坛管理 前台账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;付费电影&#x…