CIFAR-10数据集简介

CIFAR-10是由Hinton的学生Alex Krizhevsky和Ilya Sutskever整理的一个用于普适物体的小型数据集。它一共包含10个类别的RGB彩色图片:飞机、汽车、鸟类、猫、鹿、狗、蛙类、马、船:

数据集包含50000张训练图片和10000张测试图片,与MNIST手写数字数据集的区别:

                   CIFAR-10                           MNIST
3通道彩色RGB图像 灰度图像
尺寸32x32 尺寸28x28
比例、特征不同 特征较为明显

所以线性模型在CIFAR-10表现很差。

数据集及代码文件下载

数据集下载

官网地址:https://www.cs.toronto.edu/~kriz/cifar.html

代码下载

https://github.com/tensorflow/models/tree/master/tutorials/image/cifar10

文件 用途
cifar10_input.py  在TensorFlow中读入CIFAR-10训练图片
cifar10_input_test.py 测试cifar10_input.py 
cifar10.py 建立预测模型
cifar10_train.py 使用单个CPU或GPU训练
cifar10_eval.py 在测试集上测试模型的性能
cifar10_multi_gpu_train.py 使用多个GPU训练

也可以从我的网盘下载:

链接:https://pan.baidu.com/s/1GyiKrMeMpXALOxuQRn_zsg 密码:1a5y

从数据集提取图片

注意要先解压才能从.bin文件中提取

# coding: utf-8
# 导入当前目录的cifar10_input,这个模块负责读入cifar10数据
import cifar10_input
# 导入TensorFlow和其他一些可能用到的模块。
import tensorflow as tf
import os
import scipy.miscdef inputs_origin():# filenames一共5个,从data_batch_1.bin到data_batch_5.bin# 读入的都是训练图像# 改为自己数据集文件的地址filenames = [r'E:\Program\Python\Deep-Learning-21-Examples-master\chapter_2\cifar10_data\cifar-10-batches-bin\data_batch_%d.bin'% i for i in range(1, 6)]# 判断文件是否存在for f in filenames:if not tf.gfile.Exists(f):raise ValueError('Failed to find file: ' + f)# 将文件名的list包装成TensorFlow中queue的形式filename_queue = tf.train.string_input_producer(filenames)# cifar10_input.read_cifar10是事先写好的从queue中读取文件的函数# 返回的结果read_input的属性uint8image就是图像的Tensorread_input = cifar10_input.read_cifar10(filename_queue)# 将图片转换为实数形式reshaped_image = tf.cast(read_input.uint8image, tf.float32)# 返回的reshaped_image是一张图片的tensor# 我们应当这样理解reshaped_image:每次使用sess.run(reshaped_image),就会取出一张图片return reshaped_imageif __name__ == '__main__':# 创建一个会话sesswith tf.Session() as sess:# 调用inputs_origin。cifar10_data/cifar-10-batches-bin是我们下载的数据的文件夹位置reshaped_image = inputs_origin()# 这一步start_queue_runner很重要。# 我们之前有filename_queue = tf.train.string_input_producer(filenames)# 这个queue必须通过start_queue_runners才能启动# 缺少start_queue_runners程序将不能执行threads = tf.train.start_queue_runners(sess=sess)# 变量初始化sess.run(tf.global_variables_initializer())# 创建文件夹cifar10_data/raw/if not os.path.exists('cifar10_data/raw/'):os.makedirs('cifar10_data/raw/')# 保存30张图片for i in range(30):# 每次sess.run(reshaped_image),都会取出一张图片image_array = sess.run(reshaped_image)# 将图片保存scipy.misc.toimage(image_array).save('cifar10_data/raw/%d.jpg' % i)

结果

卷积神经网络模型注释

参考:https://blog.csdn.net/akadiao/article/details/79618342(这篇把所有文件都注释了,很全面)

#建立模型def inference(images):# 第一层卷积with tf.variable_scope('conv1') as scope:# 卷积核kernel = _variable_with_weight_decay('weights',shape=[5, 5, 3, 64],stddev=5e-2, wd=None)# 卷积conv = tf.nn.conv2d(images, kernel, [1, 1, 1, 1], padding='SAME')# 偏置初始化为0biases = _variable_on_cpu('biases', [64], tf.constant_initializer(0.0))pre_activation = tf.nn.bias_add(conv, biases)# ReLu激活conv1 = tf.nn.relu(pre_activation, name=scope.name)# 汇总_activation_summary(conv1)# 第一层池化pool1 = tf.nn.max_pool(conv1, ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1], padding='SAME', name='pool1')# lrn层norm1 = tf.nn.lrn(pool1, 4, bias=1.0, alpha=0.001 / 9.0, beta=0.75, name='norm1')# 第二层卷积with tf.variable_scope('conv2') as scope:# 卷积核kernel = _variable_with_weight_decay('weights', shape=[5, 5, 64, 64], stddev=5e-2, wd=None)conv = tf.nn.conv2d(norm1, kernel, [1, 1, 1, 1], padding='SAME')# 偏置初始化为0.1biases = _variable_on_cpu('biases', [64], tf.constant_initializer(0.1))pre_activation = tf.nn.bias_add(conv, biases)# ReLu激活conv2 = tf.nn.relu(pre_activation, name=scope.name)# 汇总_activation_summary(conv2)# 第二lrn层norm2 = tf.nn.lrn(conv2, 4, bias=1.0, alpha=0.001 / 9.0, beta=0.75, name='norm2')# 第二层池化pool2 = tf.nn.max_pool(norm2, ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1], padding='SAME', name='pool2')# 连接层with tf.variable_scope('local3') as scope:# 转换为一维向量reshape = tf.reshape(pool2, [FLAGS.batch_size, -1])# 维数dim = reshape.get_shape()[1].value# 防止过拟合weights = _variable_with_weight_decay('weights', shape=[dim, 384], stddev=0.04, wd=0.004)# 偏置初始化为0.1biases = _variable_on_cpu('biases', [384], tf.constant_initializer(0.1))# ReLu激活local3 = tf.nn.relu(tf.matmul(reshape, weights) + biases, name=scope.name)_activation_summary(local3)# 连接层with tf.variable_scope('local4') as scope:# 防止过拟合weights = _variable_with_weight_decay('weights', shape=[384, 192], stddev=0.04, wd=0.004)# 偏置初始化为0.1biases = _variable_on_cpu('biases', [192], tf.constant_initializer(0.1))# ReLu激活local4 = tf.nn.relu(tf.matmul(local3, weights) + biases, name=scope.name)_activation_summary(local4)# 线性层# (WX+b)不使用softmax,因为tf.nn.sparse_softmax_cross_entropy_with_logits接受未缩放的logits并在内部执行softmax以提高效率with tf.variable_scope('softmax_linear') as scope:weights = _variable_with_weight_decay('weights', [192, NUM_CLASSES], stddev=1/192.0, wd=None)# biases初始化为0biases = _variable_on_cpu('biases', [NUM_CLASSES], tf.constant_initializer(0.0))# (WX+b) 进行线性变换以输出 logitssoftmax_linear = tf.add(tf.matmul(local4, weights), biases, name=scope.name)# 汇总_activation_summary(softmax_linear)return softmax_linear# 模型训练# 损失
def loss(logits, labels):labels = tf.cast(labels, tf.int64)# 计算logits和labels之间的交叉熵cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(labels=labels, logits=logits, name='cross_entropy_per_example')# 计算整个批次的平均交叉熵损失cross_entropy_mean = tf.reduce_mean(cross_entropy, name='cross_entropy')# 把变量放入一个集合tf.add_to_collection('losses', cross_entropy_mean)# 总损失定义为交叉熵损失加上所有的权重衰减项(L2损失)return tf.add_n(tf.get_collection('losses'), name='total_loss')# 总损失
def _add_loss_summaries(total_loss):# 指数移动平均loss_averages = tf.train.ExponentialMovingAverage(0.9, name='avg')losses = tf.get_collection('losses')# 将指数移动平均应用于单个损失loss_averages_op = loss_averages.apply(losses + [total_loss])# 单个损失损失和全部损失的标量summaryfor l in losses + [total_loss]:# 将每个损失命名为raw,并将损失的移动平均命名为原始损失tf.summary.scalar(l.op.name + ' (raw)', l)tf.summary.scalar(l.op.name, loss_averages.average(l))return loss_averages_op# 训练CIFAR-10模型def train(total_loss, global_step):# 影响学习率的变量num_batches_per_epoch = NUM_EXAMPLES_PER_EPOCH_FOR_TRAIN / FLAGS.batch_sizedecay_steps = int(num_batches_per_epoch * NUM_EPOCHS_PER_DECAY)# 指数衰减lr = tf.train.exponential_decay(INITIAL_LEARNING_RATE, global_step, decay_steps,LEARNING_RATE_DECAY_FACTOR, staircase=True)tf.summary.scalar('learning_rate', lr)# 总损失loss_averages_op = _add_loss_summaries(total_loss)# 计算梯度with tf.control_dependencies([loss_averages_op]):opt = tf.train.GradientDescentOptimizer(lr)grads = opt.compute_gradients(total_loss)apply_gradient_op = opt.apply_gradients(grads, global_step=global_step)for var in tf.trainable_variables():tf.summary.histogram(var.op.name, var)for grad, var in grads:if grad is not None:tf.summary.histogram(var.op.name + '/gradients', grad)variable_averages = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY, global_step)variables_averages_op = variable_averages.apply(tf.trainable_variables())with tf.control_dependencies([apply_gradient_op, variables_averages_op]): train_op = tf.no_op(name='train')return train_op

训练的结果会保存在cifar10_train文件夹下

深度学习入门——利用卷积神经网络训练CIFAR—10数据集相关推荐

  1. 深度学习实战——利用卷积神经网络对手写数字二值图像分类(附代码)

    系列文章目录 深度学习实战--利用卷积神经网络对手写数字二值图像分类(附代码) 目录 系列文章目录 前言 一.案例需求 二.MATLAB算法实现 三.MATLAB源代码 参考文献 前言 本案例利用MA ...

  2. 【Matlab】基于MNIST数据集的图像识别(深度学习入门、卷积神经网络、附完整学习资料)

    Matlab--数字0~9的图像识别(Phil Kim著.Matlab) 本文可以为那些想对深度学习和人工智能有初步了解的朋友提供一些基础入门的帮助. 本文所用参考书: <MATLAB深度学习 ...

  3. 深度学习之利用卷积神经网络预测股票走势

    卷积神经网络项目是我在华泰实习的过程中做的一个项目,主要是用卷积神经网络来预测股票的走势,现在对项目做一个总结. 报告详情: [华泰金工林晓明团队]人工智能选股之卷积神经网络--华泰人工智能系列之十五 ...

  4. 深度学习——02、深度学习入门——经典卷积神经网络架构实例——RNN

    RNN 对比 传统神经网络 递归神经网络 RNN网络的特点:能够实现记忆功能 RNN的正向传播和反向传播 缺陷:储存量巨大,信息有冗余. 应用:自然语言处理

  5. 深度学习——02、深度学习入门——经典卷积神经网络架构实例——VGGNet

    Case Study:VGGNet

  6. 深度学习——02、深度学习入门——经典卷积神经网络架构实例——AlexNet

    Case Study:AlexNet

  7. 深度学习之基于卷积神经网络实现超大Mnist数据集识别

    在以往的手写数字识别中,数据集一共是70000张图片,模型准确率可以达到99%以上的准确率.而本次实验的手写数字数据集中有120000张图片,而且数据集的预处理方式也是之前没有遇到过的.最终在验证集上 ...

  8. [人工智能-深度学习-33]:卷积神经网络CNN - 常见分类网络- LeNet网络结构分析与详解

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  9. 深度学习21天——卷积神经网络(CNN):实现mnist手写数字识别(第1天)

    目录 一.前期准备 1.1 环境配置 1.2 CPU和GPU 1.2.1 CPU 1.2.2 GPU 1.2.3 CPU和GPU的区别 第一步:设置GPU 1.3 MNIST 手写数字数据集 第二步: ...

最新文章

  1. TCP的三次握手与四次挥手(详解+动图)
  2. Android开发之6.0动态权限工具类(高德地图官方扣出来的)附源码
  3. sapmto生产模式配置及操作详解_硬岩制砂线怎么设计?300t/h的生产流程与设备配置详解...
  4. Debian10降级安装php,如何在Debian 10 Linux上安装PHP
  5. Java基础-Collection集合接口(List及Set)
  6. 用Python学分析:集中与分散
  7. 搭建sendmail邮件服务器
  8. eclipse环境下基于已构建struts2项目整合spring+hibernate
  9. python为什么不能删除_为什么python不允许我删除文件?
  10. GameSalad是html5游戏的搅局者吗?看中国式游戏
  11. Qt 如何获取本机ip地址
  12. java语言,MP3音频文件进行合并功能
  13. 超细!在浏览器输入xxxhub 回车之后发生了什么?
  14. word里如何生成论文的目录
  15. 考研数学 每日一题 第四题
  16. 世界之最VS谁是世界上最无聊的人
  17. 初等函数导数与泰勒展开
  18. java计算机毕业设计旅游信息网站源程序+mysql+系统+lw文档+远程调试
  19. 基于swing+awt学生信息管理系统
  20. 【Java数据结构与算法】实现二叉树的先根,中根,后根,层次遍历

热门文章

  1. 满地鸡毛的一年 || 转行Android之路
  2. 封装的PKPM BimView的方法
  3. onlyoffice 收费不_OMG!你家小区物业有没有这些乱收费的现象……|物业|物业管理|物业服务|门禁卡|停车费...
  4. Kb/s,KB/s 究竟如何换算
  5. 我想谈谈关于Android面试那些事,聪明人已经收藏了!
  6. 不用PS,也能实现抠图的工具
  7. java代码实现十进制到二进制的转化
  8. H.265编码视频播放器在播放FLV视频流时出现黑屏,如何解决?
  9. rtx3080和rtx3080ti性能差距 rtx3080和rtx3080ti 参数对比哪个好
  10. 爬山法、随机重启爬山法、模拟退火算法对八皇后问题和八数码问题的性能测试...