Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >TensorFlow 基础学习 - 3 CNN

TensorFlow 基础学习 - 3 CNN

作者头像
叉叉敌
发布于 2021-12-06 07:24:45
发布于 2021-12-06 07:24:45
51300
代码可运行
举报
文章被收录于专栏:ChasaysChasays
运行总次数:0
代码可运行

卷积神经网络

抓住它的核心思路,即通过卷积操作缩小了图像的内容,将模型注意力集中在图像特定的、明显的特征上。

max pooling - 增强特征,减少数据

实现

在下面的代码中模型在训练数据上的精度可能上升到93%左右,在验证数据上可能上升到91%。

这是朝着正确方向取得的显著进步!

试着运行更多的epochs--比如20个epochs,然后观察结果! 虽然结果可能看起来非常好,但实际上验证结果可能会下降,这是因为"过拟合"造成的,后面将会讨论。

(简而言之,'过拟合'发生在网络模型从训练集中学习到的结果非常好,但它太狭隘了,只能识别训练数据,而在看到其他数据时效果不佳。举个例子,如果我们一辈子只看到红色的鞋子,那么当我们看到一双蓝色的麂皮鞋可能会感到迷惑......再举一例,应试教育往往使得学生只对做过的题目有很好的正确率,但对真实的问题却错误率很高)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tensorflow as tf
print(tf.__version__)
mnist = tf.keras.datasets.fashion_mnist
(training_images, training_labels), (test_images, test_labels) = mnist.load_data()
training_images=training_images.reshape(60000, 28, 28, 1)
training_images=training_images / 255.0
test_images = test_images.reshape(10000, 28, 28, 1)
test_images=test_images/255.0
model = tf.keras.models.Sequential([
  tf.keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(28, 28, 1)),
  tf.keras.layers.MaxPooling2D(2, 2),
  tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
  tf.keras.layers.MaxPooling2D(2,2),
  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.summary()
model.fit(training_images, training_labels, epochs=5)
test_loss = model.evaluate(test_images, test_labels)

卷积模型是如何建立的

第一步是收集数据。我们会注意到,这里和之前有一点变化,训练数据需要改变维度(shape)。这是因为第一次卷积期望一个包含所有数据的单一张量,所以要把训练数据设置为60000x28x28x1的一个4D列表,测试图像也是如此处理。如果不这样做,会在训练时得到一个错误,因为卷积操作将不能识别数据形状。

接下来是定义模型。首先要添加一个卷积层。参数是

  • 我们想要生成的卷积数(过滤器数量)。这个数值是任意的,但最好是从32开始的倍数
  • 卷积的大小(过滤器的大小),在本例中为3x3网格。这是最常用的尺寸。
  • 要使用的激活函数 -- 在本例中,我们将使用relu,我们可能还记得它相当于当x>0时返回x,否则返回0。
  • 在第一层,设定输入数据的形状

在卷积层之后加上一个MaxPooling层,用来压缩图像,同时保持卷积所强调的特征内容。通过为MaxPooling指定(2,2),效果是将图像的大小缩小四分之一。它的想法是创建一个2x2的像素数组,然后选取最大的一个,从而将4个像素变成1个,在整个图像中重复这样做,这样做的结果是将水平像素的数量减半,垂直像素的数量减半,有效地将图像缩小25%

再增加一个卷积层和MaxPooling2D。

现在对输出进行扁平化处理。在这之后,你将拥有与非卷积版本相同的DNN结构,即全连接神经元网络。

含有128个神经元的全连接层,以及10个神经元的输出层。

现在编译模型,调用model.fit方法做训练,接着用测试集评估损失和准确率。

网络结构

看看可否只使用单个卷积层和单个MaxPooling 2D将MNIST(手写数字)识别率提高到99.8%或更高的准确率。一旦准确率超过这个数值,应该停止训练。Epochs不应超过20个。如果epochs达到20但精度未达到要求,那么就需要重新设计层结构。当达到99.8%的准确率时,你应该打印出 "达到99.8%准确率,所以取消训练!"的字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tensorflow as tf
from tensorflow import keras

## overwrite callback

class Callbacks(tf.keras.callbacks.Callback):
  def on_epoch_end(self, epoch, logs={}):
    if(logs.get('accuracy')>=0.998):
      print("达到99.8%准确率,所以取消训练!")
      self.model.stop_training = True

callbacks = Callbacks()

## 准备数据
mnist = tf.keras.datasets.mnist
(training_images, training_labels), (test_images, test_labels) = mnist.load_data()

## 归一化
training_images = training_images.reshape(60000, 28, 28, 1)
training_images = training_images / 255.0

test_images = test_images.reshape(10000, 28, 28, 1)
test_images  = test_images / 255.0

## 建立模型
model = tf.keras.models.Sequential([
   tf.keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(28, 28, 1)),
   tf.keras.layers.MaxPooling2D(2, 2),
  #  tf.keras.layers.Conv2D(62, (3, 3), activation='relu'),
  #  tf.keras.layers.MaxPooling2D(2,2),

   tf.keras.layers.Flatten(), ##扁平化
   tf.keras.layers.Dense(128, activation='relu'),
   tf.keras.layers.Dense(10, activation='softmax')
])


## 训练
model.compile(optimizer=tf.keras.optimizers.Adam(), 
              loss=tf.keras.losses.SparseCategoricalCrossentropy(),
              metrics=['accuracy'])
model.summary()
model.fit(training_images, training_labels, epochs=4, callbacks=[callbacks])

## 预测和评估

test_loss = model.evaluate(test_images, test_labels)

结果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用Python实现深度学习模型:智能数据隐私保护
随着数据隐私问题的日益严重,如何在深度学习模型中保护用户数据成为了一个重要的研究方向。本文将介绍如何使用Python实现一个深度学习模型,同时采用差分隐私技术来保护数据隐私。
Echo_Wish
2024/09/29
1460
使用Python实现深度学习模型:智能数据隐私保护
TensorFlow 基础学习 - 2
让我们来看这样一个场景,让计算机识别不同的服装用品(有提包、鞋子、裤子等10类物品)。我们将用包含10种不同类型的物品图片的数据集来训练一个神经元网络,实现分类。
叉叉敌
2021/12/06
4520
TensorFlow 基础学习 - 2
AI识万物:从0搭建和部署手语识别系统 ⛵
据北京听力协会预估数据,我国听障人群数量已过千万。而在全球范围内有4.66亿人患有残疾性听力损失,约占全世界人口的5%。聋哑人士很特殊,他们需要使用手语进行交流,其他与常人无异,我国存在特殊教育水平在各城市中发展力度具有较大差异,国家通用手语推广程度浅,但不懂手语,与听力障碍者交流会非常困难。
ShowMeAI
2022/08/09
1.1K0
AI识万物:从0搭建和部署手语识别系统 ⛵
【TensorFlow2.x开发—基础】 模型保存、加载、使用
本文主要介绍在TensorFlow2 中使用Keras API保存整个模型,以及如果使用保存好的模型。保存整个模型时,有两种格式可以实现,分别是SaveModel和HDF5;在TF2.x中默认使用SavedModel格式。
一颗小树x
2021/05/15
4.7K0
【TensorFlow2.x开发—基础】 模型保存、加载、使用
使用Python实现深度学习模型:分布式训练与模型并行化
随着深度学习模型的复杂度和数据量的增加,单一设备的计算能力往往无法满足训练需求。分布式训练和模型并行化技术可以有效地加速模型训练过程,提高计算效率。本文将介绍如何使用Python实现深度学习模型的分布式训练与模型并行化。
Echo_Wish
2024/07/09
2570
使用Python实现深度学习模型:分布式训练与模型并行化
MOOC TensorFlow入门实操课程代码回顾总结(一)
0 T-shirt/top(体恤) 1 Trouser(裤子) 2 Pullover(套头衫) 3 Dress(连衣裙) 4 Coat(外套) 5 Sandal(凉鞋) 6 Shirt(衬衫) 7 Sneaker(运动鞋) 8 Bag(袋子) 9 Ankle boot(短靴)
荣仔_最靓的仔
2022/01/05
7400
MOOC TensorFlow入门实操课程代码回顾总结(一)
智能环保卫士:AI 图像识别助力垃圾分类与环保教育
不用多讲,想必大部分也都知道深度学习是人工智能的一个重要分支,它通过构建多层神经网络来模拟人脑的信息处理方式。在图像识别领域,深度学习模型(如卷积神经网络,CNN)能够自动从大量图像数据中学习特征,从而实现对图像的分类和识别。尤其是近年来,深度学习在图像识别任务中取得了显著的成果,其准确率和效率都得到了极大的提升。
三掌柜
2025/04/18
870
深度学习三大框架对比与实战:PyTorch、TensorFlow 和 Keras 全面解析
在当今深度学习领域,PyTorch、TensorFlow 和 Keras 是三大主流框架。它们各具特色,分别满足从研究到工业部署的多种需求。本文将通过清晰的对比和代码实例,帮助你了解这些框架的核心特点以及实际应用。
用户11292525
2024/11/21
3360
使用TensorFlow和OpenCV实现口罩检测
在这段艰难的疫情期间,我们决定建立一个非常简单和基本的卷积神经网络(CNN)模型,使用TensorFlow与Keras库和OpenCV来检测人们是否佩戴口罩。
小白学视觉
2020/06/12
2.7K2
深度学习工具和框架详细指南:PyTorch、TensorFlow、Keras
在深度学习的世界中,PyTorch、TensorFlow和Keras是最受欢迎的工具和框架,它们为研究者和开发者提供了强大且易于使用的接口。在本文中,我们将深入探索这三个框架,涵盖如何用它们实现经典深度学习模型,并通过代码实例详细讲解这些工具的使用方法。
平凡之路.
2024/11/21
1.4K0
快乐学AI系列——计算机视觉(4.篇外)什么是“卷积神经网络”
卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习算法,常用于计算机视觉领域的图像分类、目标检测和图像分割任务中。它的核心思想是通过卷积运算从原始数据中提取特征,然后将这些特征传递给全连接层进行分类或回归。
MATRIX.矩阵之芯
2023/04/05
4190
快乐学AI系列——计算机视觉(4.篇外)什么是“卷积神经网络”
深度学习实战-CNN猫狗识别
本文记录了第一个基于卷积神经网络在图像识别领域的应用:猫狗图像识别。主要内容包含:
皮大大
2023/08/23
7350
TensorFlow从1到2(三)数据预处理和卷积神经网络
从这个例子开始,相当比例的代码都来自于官方新版文档的示例。开始的几个还好,但随后的程序都将需要大量的算力支持。Google Colab是一个非常棒的云端实验室,提供含有TPU/GPU支持的Python执行环境(需要在Edit→Notebook Settings设置中打开)。速度比不上配置优良的本地电脑,但至少超过平均的开发环境。 所以如果你的电脑运行速度不理想,建议你尝试去官方文档中,使用相应代码的对应链接进入Colab执行试一试。 Colab还允许新建Python笔记,来尝试自己的实验代码。当然这一切的前提,是需要你科学上网。
俺踏月色而来
2019/04/21
1K0
MOOC TensorFlow入门实操课程代码回顾总结(二)
欢迎来到TensorFlow入门实操课程的学习 MOOC TensorFlow入门实操课程代码回顾总结(一) MOOC TensorFlow入门实操课程代码回顾总结(三) 注: 用于表示python代码 粘贴运行结果 目录 5 图像分类基础应用——猫狗分类案例 5.1 导入库 5.2 下载数据集 5.3 查看样本数目 5.4 创建文件夹,存放训练测试数据 5.5 切分为训练数据和测试数据 5.6 模型构建 5.7 数据预处理 5.8 模型训练 5.9 训练结果可视化 5.10 模型推理 6 迁移学
荣仔_最靓的仔
2022/01/05
5550
MOOC TensorFlow入门实操课程代码回顾总结(二)
TensorFlow 2.0 - tf.data.Dataset 数据预处理 & 猫狗分类
项目及数据地址:https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition/overview
Michael阿明
2021/02/19
2.5K0
TensorFlow 2.0 - tf.data.Dataset 数据预处理 & 猫狗分类
Tensorflow2——卷积神经网络的搭建
***** 以下有关代码全是在jupyter notebook 里面调试完后曾,如果直接复制粘贴到pycharm可能不太行,自己得改改
Albert_xiong
2021/06/21
1.3K0
Tensorflow2——卷积神经网络的搭建
Tensorflow2——tensorboard可视化
下面通过手写数字数据集来介绍如何使用tensorboard可视化 可以两种方法,一种是再notebook里,还有一种是网页打开。 jupyter notebook 调试
Albert_xiong
2021/06/21
4960
Tensorflow2——tensorboard可视化
深度学习-卷积神经网络
在之前的分类学习中,使用普通的神经网络能够达到97.8的精确度,使用卷积神经网络能够达到0.99的精确度
火星娃统计
2020/09/15
4140
[Keras深度学习浅尝]实战二·CNN实现Fashion MNIST 数据集分类
与我们上篇博文[Keras深度学习浅尝]实战一结构相同,修改的地方有,定义网络与模型训练两部分,可以对比着来看。通过使用CNN结构,预测准确率略有提升,可以通过修改超参数以获得更优结果。 代码部分
小宋是呢
2019/06/27
1.3K0
使用Python实现深度学习模型:模型安全与防御
随着深度学习模型在各个领域的广泛应用,模型的安全性和防御能力变得尤为重要。攻击者可能会利用模型的漏洞进行对抗性攻击,导致模型输出错误的结果。本文将介绍如何使用Python实现深度学习模型的安全与防御,并提供详细的代码示例。
Echo_Wish
2024/07/12
1930
使用Python实现深度学习模型:模型安全与防御
推荐阅读
相关推荐
使用Python实现深度学习模型:智能数据隐私保护
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验