1 importcifar10, cifar10_input2 importtensorflow as tf3 importnumpy as np4 importtime5 importmath6

7 max_steps = 3000

8 batch_size = 128

9 data_dir = '/tmp/cifar10_data/cifar-10-batches-bin'

10

11

12 defvariable_with_weight_loss(shape, stddev, w1):13 '''定义初始化weight函数,使用tf.truncated_normal截断的正态分布,但加上L2的loss,相当于做了一个L2的正则化处理'''

14 var = tf.Variable(tf.truncated_normal(shape, stddev=stddev))15 '''w1:控制L2 loss的大小,tf.nn.l2_loss函数计算weight的L2 loss'''

16 if wl is notNone:17 weight_loss = tf.multiply(tf.nn.l2_loss(var), w1, name='weight_loss')18 '''tf.add_to_collection:把weight losses统一存到一个collection,名为losses'''

19 tf.add_to_collection('losses', weight_loss)20

21 returnvar22

23

24 #使用cifar10类下载数据集并解压展开到默认位置

25 cifar10.maybe_download_and_extract()26

27 '''distored_inputs函数产生训练需要使用的数据,包括特征和其对应的label,28 返回已经封装好的tensor,每次执行都会生成一个batch_size的数量的样本'''

29 images_train, labels_train = cifar10_input.distored_inputs(data_dir=data_dir,30 batch_size=batch_size)31

32 images_test, labels_test = cifar10_input.inputs(eval_data=True,33 data_dir=data_dir,34 batch_size=batch_size)35

36 image_holder = tf.placeholder(tf.float32, [batch_size, 24, 24, 3])37 label_holder =tf.placeholder(tf.int32, [batch_size])38

39 '''第一个卷积层:使用variable_with_weight_loss函数创建卷积核的参数并进行初始化。40 第一个卷积层卷积核大小:5x5 3:颜色通道 64:卷积核数目41 weight1初始化函数的标准差为0.05,不进行正则wl(weight loss)设为0'''

42 weight1 = variable_with_weight_loss(shape=[5, 5, 3, 64], stddev=5e-2, wl=0.0)43 #tf.nn.conv2d函数对输入image_holder进行卷积操作

44 kernel1 = tf.nn.conv2d(image_holder, weight1, [1, 1, 1, 1], padding='SAME')45

46 bias1 = tf.Variable(tf.constant(0.0, shape=[64]))47

48 conv1 =tf.nn.relu(tf.nn.bias_add(kernel1, bias1))49 #最大池化层尺寸为3x3,步长为2x2

50 pool1 = tf.nn.max_pool(conv1, ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1])51 #LRN层模仿生物神经系统的'侧抑制'机制

52 norm1 = tf.nn.lrn(pool1, 4, bias=1.0, alpha=0.001 / 9.0, beta=0.75)53

54 '''第二个卷积层:'''

55 weight2 = variable_with_weight_loss(shape=[5, 5, 64, 64], stddev=5e-2, wl=0.0)56 kernel2 = tf.nn.conv2d(norm1, weight2, [1, 1, 1, 1], padding='SAME')57 #bias2初始化为0.1

58 bias2 = tf.Variable(tf.constant(0.1, shape=[64]))59

60 conv2 =tf.nn.relu(tf.nn.bias_add(kernel2, bias2))61 norm2 = tf.nn.lrn(conv2, 4, bias=1.0, alpha=0.001 / 9.0, beta=0.75)62 pool2 = tf.nn.max_pool(norm2, ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1], padding='SAME')63

64 #全连接层

65 reshape = tf.reshape(pool2, [batch_size, -1])66 dim = reshape.get_shape()[1].value67 weight3 = variable_with_weight_loss(shape=[dim, 384], stddev=0.04, wl=0.004)68 bias3 = tf.Variable(tf.constant(0.1, shape=[384]))69 local3 = tf.nn.relu(tf.matmul(reshape, weight3) +bias3)70

71 #全连接层,隐含层节点数下降了一半

72 weight4 = variable_with_weight_loss(shape=[384, 182], stddev=0.04, wl=0.004)73 bias4 = tf.Variable(tf.constant(0.1, shape=[192]))74 local4 = tf.nn.relu(tf.matmul(local3, weight4) +bias4)75

76 '''正态分布标准差设为上一个隐含层节点数的倒数,且不计入L2的正则'''

77 weight5 = variable_with_weight_loss(shape=[192, 10], stddev=1 / 192.0, wl=0.0)78 bias5 = tf.Variable(tf.constant(0.0, shape=[10]))79 logits =tf.add(tf.matmul(local4, weight5), bias5)80

81

82 defloss(logits, labels):83 '''计算CNN的loss84 tf.nn.sparse_softmax_cross_entropy_with_logits作用:85 把softmax计算和cross_entropy_loss计算合在一起'''

86 labels =tf.cast(labels, tf.int64)87 cross_entropy =tf.nn.sparse_softmax_cross_entropy_with_logits(88 logits=logits, labels=labels, name='cross_entropy_per_example')89 #tf.reduce_mean对cross entropy计算均值

90 cross_entropy_mean =tf.reduce_mean(cross_entropy,91 name='cross_entropy')92 #tf.add_to_collection:把cross entropy的loss添加到整体losses的collection中

93 tf.add_to_collection('losses', cross_entropy_mean)94 #tf.add_n将整体losses的collection中的全部loss求和得到最终的loss

95 return tf.add_n(tf.get_collection('losses'), name='total_loss')96

97

98 #将logits节点和label_holder传入loss计算得到最终loss

99 loss =loss(logits, label_holder)100

101 train_op = tf.trian.AdamOptimizer(1e-3).minimize(loss)102 #求输出结果中top k的准确率,默认使用top 1(输出分类最高的那一类的准确率)

103 top_k_op = tf.nn.in_top_k(logits, label_holder, 1)104

105 sess =tf.InteractiveSession()106 tf.global_variables_initializer().run()107 tf.trian.start_queue_runners()108

109 for step inrange(max_steps):110 '''training:'''

111 start_time =time.time()112 #获得一个batch的训练数据

113 image_batch, label_batch =sess.run([images_train, labels_train])114 #将batch的数据传入train_op和loss的计算

115 _, loss_value =sess.run([train_op, loss],116 feed_dict={image_holder: image_batch, label_holder: label_batch})117

118 duration = time.time() -start_time119 if step % 10 ==0:120 #每秒能训练的数量

121 examples_per_sec = batch_size /duration122 #一个batch数据所花费的时间

123 sec_per_batch =float(duration)124

125 format_str = ('step %d, loss=%.2f (%.1f examples/sec; %.3f sec/batch)')126 print(format_str %(step, loss_value, examples_per_sec, sec_per_batch))127 #样本数

128 num_examples = 10000

129 num_iter = int(math.ceil(num_examples /batch_size))130 true_count =0131 total_sample_count = num_iter *batch_size132 step =0133 while step <134 labels_test>

135 image_batch, label_batch =sess.run([images_test, labels_test])136 #计算这个batch的top 1上预测正确的样本数

137 preditcions = sess.run([top_k_op], feed_dict={image_holder: image_batch,138 label_holder: label_batch139 })140 #全部测试样本中预测正确的数量

141 true_count +=np.sum(preditcions)142 step += 1

143 #准确率

144 precision = true_count /total_sample_count145 print('precision @ 1 = %.3f' % precision)

134>

tensorflow 读取cifar_TensorFlow实战4——TensorFlow实现Cifar10识别相关推荐

  1. tensorflow 读取cifar_tensorflow cifar10读取数据get stu

    我试图用tensorflow读取cifar10的输入数据.我知道tensorflow/models github repo下存在cifar10.py.当运行以下代码时,它基本上会卡住,并且在屏幕上没有 ...

  2. 【Tensorflow】深度学习实战02——Tensorflow实现进阶的卷积网络(CIFAR-10)

    [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 之前使用Tensorflow实现了一个简单卷积神经网络用于手写数字识别,那是一个简单的 ...

  3. 视频教程-深度学习与TensorFlow 2入门实战-深度学习

    深度学习与TensorFlow 2入门实战 新加坡国立大学研究员 龙良曲 ¥399.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取优惠,最少立减5 ...

  4. 深度学习实战—基于TensorFlow 2.0的人工智能开发应用

    作者:辛大奇 著 出版社:中国水利水电出版社 品牌:智博尚书 出版时间:2020-10-01 深度学习实战-基于TensorFlow 2.0的人工智能开发应用

  5. 跨年之际,中文版畅销书《TensorFlow深度学习实战大全》分享,直接送!

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 跨年之际,给大家一份福利,赠书抽奖,一共4本!感兴趣的同学可以参与一下,奖品是新书&l ...

  6. 云端TensorFlow读取数据IO的高效方式

    低效的IO方式 最近通过观察PAI平台上TensoFlow用户的运行情况,发现大家在数据IO这方面还是有比较大的困惑,主要是因为很多同学没有很好的理解本地执行TensorFlow代码和分布式云端执行T ...

  7. 快速使用Tensorflow读取7万数据集!

    一.Brief概述 这篇文章中,我们使用知名的图片数据库[THE MNIST DATABASE]作为我们的图片来源,它的数据内容是一共七万张28x28像素的手写数组图片. 并被分成六万张训练集与一万张 ...

  8. TensorFlow读取MNIST数据集错误的问题

    TensorFlow读取mnist数据集错误的问题 运行程序出现"URLError"错误的问题 可能是服务器或路径的原因,可以自行下载数据集后,将数据集放到代码所在的文件夹下,并将 ...

  9. 【Tensorflow】深度学习实战06——Tensorflow实现ResNet

    前言   ResNet(Residual Neural Network)由前微软研究院的 Kaiming He 等4名华人提出(有兴趣的可以点击这里,查看论文原文),通过使用 Residual Blo ...

最新文章

  1. [LeetCode] 461. Hamming Distance
  2. [实用]DNS解析命令,静静地学会【转载】
  3. 使用mintty(_如何使用Mintty改善Cygwin控制台
  4. 关于代码组织的一些看法(上)
  5. Java Web应用小案例:实现登录功能
  6. 为转型绞尽脑汁,新东方到美国教中文!网友:卷到国外去了
  7. mac macaca android,[求助] mac 上安装 macaca 的问题
  8. 神经元与网络结构概论
  9. SuperPoint学习---demo代码理解
  10. 中科软java笔试题
  11. 将OpenWRT安装到 X86 电脑硬盘中
  12. PostgreSQL数据库统计信息——analyze命令
  13. OpenCV边缘检测算法
  14. base64加密及方式
  15. 实现app第一次安装浮层引导View!
  16. 2015年医学核心期刊目录(有效期自2014年)
  17. 洛谷P3374 【模板】树状数组 1
  18. 一篇文章带你更好了解热门Java开发工具IDEA!
  19. android获取用户手机信息,Android – 使用AccountManager /手机所有者的姓氏和姓氏获取用户数据...
  20. http协议之response响应详解

热门文章

  1. jQuery的筛选和文档处理
  2. Apach Geode数据项
  3. js验证邮箱和密码长度
  4. webrtc拥塞控制
  5. 如何安装JDK 7/8并进行Java编程
  6. 打油诗---------听说名字要长才有人看
  7. 联合证券|左手消费,右手TMT!超270只股票新年获“买入”“推荐”
  8. 基于Qt5模拟企业微信聊天界面(QWidget)
  9. mongo执行逻辑表达式_MongoDB 逻辑备份工具mongodump
  10. 获取小程序各个组件的默认样式