Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CIFAR-10数据集 图像识别

CIFAR-10数据集 图像识别

作者头像
用户6021899
发布于 2019-12-25 06:42:15
发布于 2019-12-25 06:42:15
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

之前我是在CPU上跑Tensorflow,计算速度着实让人捉急。最近更新了显卡驱动,安装了CUDA和 GPU版的TensorFlow,同样的神经网络结构,学习速度有了百倍提升。

下面言归正传,我们来讲代码。本篇我们还是用序列化的(串行的)卷积神经网络,基于CIFAR-10数据集创建图像识别模型。由于我的GTX750Ti连入门级显卡都算不上,因此仅仅用了3个卷积层+1个池化层+两个全连接层(中间还加了两个Dropout以避免过拟合)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
"""
Created on Tue Dec 10 20:04:58 2019
@author: wsp
Tensorflow version:2.0
Python version 3.7
"""
from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf
from load_dataset import train_dataset, train_labels, valid_dataset, valid_labels
from matplotlib import pyplot as plt

cifar10 = tf.keras.datasets.cifar10
#(x_train, y_train), (x_test, y_test) = cifar10.load_data() #从网络下载数据集
x_train, y_train = train_dataset, train_labels
x_test, y_test= valid_dataset, valid_labels
x_train, x_test = x_train / 255.0, x_test / 255.0

tf.keras.models.Sequential()用于创建序列化的神经网络模型。

tf.keras.layers.Flatten() 用于将tensor展平,展平后才能做全连接层的input。

tf.keras.layers.Dense()用于创建全连接层。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model = tf.keras.models.Sequential([
  tf.keras.layers.Conv2D(input_shape=(32,32,3),filters= 16,kernel_size=(3,3),strides=(1,1),padding='same',activation='relu'),
  tf.keras.layers.Conv2D(filters= 32,kernel_size=(3,3),strides=(1,1),padding='same',activation='relu'),
  tf.keras.layers.Conv2D(filters= 64,kernel_size=(3,3),strides=(1,1),padding='same',activation='relu'), 
  tf.keras.layers.MaxPooling2D(pool_size=(2,2),strides=(1,1)),
  tf.keras.layers.Dropout(0.25),

  #tf.keras.layers.Conv2D(filters= 32,kernel_size=(3,3),strides=(1,1),padding='same',activation='relu'),
  #tf.keras.layers.Conv2D(filters= 64,kernel_size=(3,3),strides=(1,1),padding='same',activation='relu'),
  #tf.keras.layers.Conv2D(filters= 64,kernel_size=(3,3),strides=(1,1),padding='same',activation='relu'),
  #tf.keras.layers.MaxPooling2D(pool_size=(2,2),strides=(1,1)),
  #tf.keras.layers.Dropout(0.25),

  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(500, activation='relu'),
  tf.keras.layers.Dropout(0.25),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile()用于配置模型的训练流程。tf.keras.Model.compile 采用三个重要参数:

  • optimizer:此对象会指定训练过程。从tf.train模块向其传递优化器实例,例如AdamOptimizer、RMSPropOptimizer或GradientDescentOptimizer。
  • loss:要在优化期间最小化的函数。常见选择包括均方误差(mse)、categorical_crossentropy 和 binary_crossentropy。损失函数由名称或通过从 tf.keras.losses 模块传递可调用对象来指定。
  • metrics:用于监控训练。它们是 tf.keras.metrics 模块中的字符串名称或可调用对象。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

tf.keras.Model.fit()进行测试试数据与模型的拟合

model.fit(data,labels,epochs=20,batch_size=500,validation_data=(val_data, val_labels))

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
history = model.fit(x_train, y_train, epochs=50) # 训练50

tf.keras.Model.evaluate() 用于评估模型

verbose:日志显示 verbose = 0 为不在标准输出流输出日志信息 verbose = 1 为输出进度条记录 verbose = 2 为每个epoch输出一行记录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model.evaluate(x_test,  y_test, verbose=2)

保存模型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model.save('my_cifar10_model.h5')

下面这段的作用仅仅是绘制出Loss和预测准确度曲线:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plt.subplot(121)
accuracy = history.history['accuracy']
plt.plot(range(1,len(accuracy)+1), accuracy)
#plt.plot(history.history['val_acc'])
plt.title('train set accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.subplot(122)
plt.plot(range(1,len(accuracy)+1), history.history['loss'])
#plt.plot(history.history['val_acc'])
plt.title('train set loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.show()

可以看出,训练完后模型在验证集上的预测准确度高达98%。

下面我们可以使用已经保存好的模型来预测从网上下载的图片的分类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
"""

@author: wsp
"""
from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf
#from load_dataset import train_dataset, train_labels, valid_dataset, valid_labels,names
from matplotlib import pyplot as plt
#x_train, y_train = train_dataset, train_labels
#x_test, y_test= valid_dataset, valid_labels
#x_train, x_test = x_train / 255.0, x_test / 255.0

#加载模型
new_model = tf.keras.models.load_model('my_cifar10_model.h5')
#利用加载后的模型对整个验证集做预测
#预测一组样本
#y_ = new_model.predict(x_test) 
#result = tf.argmax(y_, 1) #
#print(result)
#for i in range(5):
    #index = int(result[i])
    #print("验证集第%d张图片的分类索引是 %d:"% (i, index))
    #print("分类名称是:%s "% names[index])
#print()

#预测单张图片
def resize(img_path): 
    '''将图片resize为 32x32x3'''
    image = plt.imread(img_path)
    resized = tf.image.resize(image,[32,32],method='bilinear')
    #return tf.cast(resized, tf.uint8)
    return resized
 
from load_dataset import names
my_img = resize('4.jpg')/255.0 #要符合xinput的格式
my_input = tf.reshape(my_img,(1,32,32,3))
result = tf.argmax(new_model.predict(my_input) , 1)
print("分类名称是:%s "% names[int(result[0])])

分类名称是:b'bird'

分类名称是:b'horse'

分类名称是:b'cat'

还行!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python从0到100(八十四):神经网络-卷积神经网络训练CIFAR-10数据集
CIFAR-10 数据集由 10 个类的 60000 张 32x32 彩色图像组成,每类 6000 张图像。有 50000 张训练图像和 10000 张测试图像。
是Dream呀
2025/03/05
1460
Python从0到100(八十四):神经网络-卷积神经网络训练CIFAR-10数据集
TensorFlow (2) CIFAR-10 简单图像识别
本文主要学习获取 CIFAR-10 数据集,通过简单的模型对数据集进行训练和识别。
coding01
2021/02/24
1.4K0
AI识万物:从0搭建和部署手语识别系统 ⛵
据北京听力协会预估数据,我国听障人群数量已过千万。而在全球范围内有4.66亿人患有残疾性听力损失,约占全世界人口的5%。聋哑人士很特殊,他们需要使用手语进行交流,其他与常人无异,我国存在特殊教育水平在各城市中发展力度具有较大差异,国家通用手语推广程度浅,但不懂手语,与听力障碍者交流会非常困难。
ShowMeAI
2022/08/09
1K0
AI识万物:从0搭建和部署手语识别系统 ⛵
TensorFlow2.0 实战强化专栏(二):CIFAR-10项目
Alex Krizhevsky,Vinod Nair和Geoffrey Hinton收集了8000万个小尺寸图像数据集,CIFAR-10和CIFAR-100分别是这个数据集的一个子集(http://www.cs.toronto.edu/~kriz/cifar.html)。CIFAR-10数据集由10个类别共60000张彩色图片组成,其中每张图片的大小为32X32,每个类别分别6000张。
磐创AI
2020/03/04
1.1K0
Fashion_mnist 数据集 图像识别
fashion_mnist 和 mnist 一样,都是深度学习入门用的简单数据集,两者的图片尺寸一样,都是28x28。fashion_mnist的训练集有6万张图片,测试集有1万张图片,全是衣服、鞋、包包之类的图片,共10个类别:
用户6021899
2020/01/17
1.4K0
Fashion_mnist 数据集 图像识别
深度学习模型在图像识别中的应用:CIFAR-10数据集实践与准确率分析
深度学习模型在图像识别领域的应用越来越广泛。通过对图像数据进行学习和训练,这些模型可以自动识别和分类图像,帮助我们解决各种实际问题。其中,CIFAR-10数据集是一个广泛使用的基准数据集,包含了10个不同类别的彩色图像。本文将介绍如何使用深度学习模型构建一个图像识别系统,并以CIFAR-10数据集为例进行实践和分析。文章中会详细解释代码的每一步,并展示模型在测试集上的准确率。此外,还将通过一张图片的识别示例展示模型的实际效果。通过阅读本文,您将了解深度学习模型在图像识别中的应用原理和实践方法,为您在相关领域的研究和应用提供有价值的参考。
全栈若城
2024/02/29
9110
深度学习模型在图像识别中的应用:CIFAR-10数据集实践与准确率分析
卷积_ResNet
刚才边写这个,别跑程序,偏偏没有选择自动保存,因此没得了,一个字也没有给我留下来,消耗了我所有的耐心。
火星娃统计
2021/11/02
3290
深度学习入门数据集--2.fasion-mnist数据集
数据可以从git仓库上下载,https://github.com/zalandoresearch/fashion-mnist fasion-mnist 作为tensorflow分类教程数据,通过访问链接可以获得更多内容https://www.tensorflow.org/tutorials/keras/basic_classification
birdskyws
2019/03/06
1.8K0
带你一文搞懂CNN以及图像识别(Python)
卷积神经网络(Convolution Neural Networks,CNN)是一类包含卷积计算的前馈神经网络,是基于图像任务的平移不变性(图像识别的对象在不同位置有相同的含义)设计的,擅长应用于图像处理等任务。在图像处理中,图像数据具有非常高的维数(高维的RGB矩阵表示),因此训练一个标准的前馈网络来识别图像将需要成千上万的输入神经元,除了显而易见的高计算量,还可能导致许多与神经网络中的维数灾难相关的问题。
JOYCE_Leo16
2024/03/19
1.2K0
带你一文搞懂CNN以及图像识别(Python)
一文弄懂CNN及图像识别(Python)
卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算的前馈神经网络,是基于图像任务的平移不变性(图像识别的对象在不同位置有相同的含义)设计的,擅长应用于图像处理等任务。在图像处理中,图像数据具有非常高的维数(高维的RGB矩阵表示),因此训练一个标准的前馈网络来识别图像将需要成千上万的输入神经元,除了显而易见的高计算量,还可能导致许多与神经网络中的维数灾难相关的问题。
算法进阶
2022/06/02
1.5K0
一文弄懂CNN及图像识别(Python)
Keras与经典卷积——50行代码实现minst图片分类
本文将简要介绍经典卷积神经网络的基本原理,并以minst图片分类为例展示用Keras实现经典卷积神经网络的方法。
lyhue1991
2020/07/20
9520
04.卷积神经网络 W2.深度卷积网络:实例探究(作业:Keras教程+ResNets残差网络)
Keras 是更高级的框架,对普通模型来说很友好,但是要实现更复杂的模型需要 TensorFlow 等低级的框架
Michael阿明
2021/02/19
7710
CNN模型识别cifar数据集
构建简单的CNN模型识别cifar数据集。 经过几天的简单学习,尝试写了一个简单的CNN模型通过cifar数据集进行训练。效果一般,测试集上的的表现并不好,说明模型的构建不怎么样。
Echo_Wish
2023/11/30
1840
【小白学习Keras教程】四、Keras基于数字数据集建立基础的CNN模型
-CNN的基本结构:CNN与MLP相似,因为它们只向前传送信号(前馈网络),但有CNN特有的不同类型的层
润森
2022/08/18
5850
【小白学习Keras教程】四、Keras基于数字数据集建立基础的CNN模型
从cifar10分类入门深度学习图像分类(Keras)
之前需要做一个图像分类模型,因为刚入门,拿cifar10数据集练了下手,试了几种优化方案和不同的模型效果,这里就统一总结一下这段学习经历。
Cloudox
2021/11/23
1.5K0
从cifar10分类入门深度学习图像分类(Keras)
经典神经网络 | ResNet 论文解析及代码实现
论文题目:Deep Residual Learning for Image Recognition
墨明棋妙27
2022/09/23
7100
深度学习|Keras识别CIFAR-10图像(CNN)
CIFAR-10数据集有6000个32×32个彩色图片,50000个训练图片和10000个测试图片。有10个类别:飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船、卡车。
罗罗攀
2019/01/28
1.3K0
深度学习|Keras识别CIFAR-10图像(CNN)
从零开始构建:使用CNN和TensorFlow进行人脸特征检测
人脸检测系统在当今世界中具有巨大的用途,这个系统要求安全性,可访问性和趣味性!今天,我们将建立一个可以在脸上绘制15个关键点的模型。
deephub
2020/05/09
1.1K0
从零开始构建:使用CNN和TensorFlow进行人脸特征检测
自动驾驶汽车的交通标志识别
由于特斯拉等公司在电动汽车自动化方面的努力,无人驾驶汽车正变得非常受欢迎。为了成为5级自动驾驶汽车,这些汽车必须正确识别交通标志并遵守交通规则。在识别出这些交通标志之后,它还应该能够适当地做出正确的决定。
代码医生工作室
2020/02/21
1.5K0
自动驾驶汽车的交通标志识别
深度学习图片分类CNN模板
其中A,B,C都代表label,三个文件夹存在具体的图片。只要是这样类型的,直接套下面模板。
润森
2022/09/22
1.1K0
深度学习图片分类CNN模板
推荐阅读
相关推荐
Python从0到100(八十四):神经网络-卷积神经网络训练CIFAR-10数据集
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档