基于tensorflow的cifar10/cifar100数据读取与分类模型搭建

在使用tensorflow进行分类模型搭建学习过程中,cifar10/cifar100数据集是非常经典的的问题,可以说处理好了这个数据集,你就基本上能够对tensorflow进行分类任务的所有知识点都有了整体掌握,下一步就可以去进军Imagenet这样的超大型数据集了。

本篇博客主要介绍基于tensorflow的cifar10/cifar100数据读取与分类模型搭建。


先说个题外话,如何使用tensorflow查看电脑的cpu与gpu。
其实吧,如果你熟悉nvidia的显卡驱动或者cuda原理,可以直接使用命令进行设备名称输出,不通过tensorflow也行。更不高端的方法,你甚至还可以使用相关辅助软件(自己网上搜。。),会者直接去设备管理器也能直接查看到。。

这里的tensorflow只是一个装逼的方法。。不过往往在调试中可能会更加有用。

1、查看电脑GPU和CPU

import os
from tensorflow.python.client import device_lib
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "99"
 
if __name__ == "__main__":
    print(device_lib.list_local_devices())

基于tensorflow的cifar10/cifar100数据读取与分类模型搭建_第1张图片

2、指定CPU或GPU进行计算

#使用CPU进行计算
with tf.device("/cpu:0"):
    a = tf.constant([1.0,2.0,3.0,4.0,5.0,6.0],shape=[2,3])
    b = tf.constant([1.0,2.0,3.0,4.0,5.0,6.0],shape=[3,2])
    c = tf.matmul(a,b)
    #查看计算时硬件的使用情况
    sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
    print(sess.run(c))

基于tensorflow的cifar10/cifar100数据读取与分类模型搭建_第2张图片

通过tf.device可以指定计算时使用的设备,0表示设备的个数,如果想要使用GPU进行计算,将CPU改成GPU即可。

3、查看tensor详细情况

    #设置运行时候的参数
    options = tf.RunOptions(output_partition_graphs=True)
    metadata = tf.RunMetadata()
    c_val = sess.run(c,options=options,run_metadata=metadata)
    print(metadata.partition_graphs)
    #关闭session
    sess.close()

基于tensorflow的cifar10/cifar100数据读取与分类模型搭建_第3张图片
更多地,你还可以参考以下链接
tensorflow获取可用GPU设备: https://blog.csdn.net/weixin_35653315/article/details/71403386

再高端一点,你还可以使用terminal新开一个窗口,实时查看显存占用率与使用情况,在使用另外窗口直接定期显示tensorflowboard的内容。。


以上都是闲话,下面步入正题。

先给出CIFAR-10/CIFAR-100数据集介绍。
参考: https://www.cnblogs.com/cloud-ken/p/8456878.html

我补充几点:
1、对于cifar10/cifar100数据集,一般有好几种格式,都能用,但是往往有所侧重,这里tensorflow一般使用python版,并且一定要好好看这些数据集的介绍,往往会告诉你了这些数据的组织的方式,一般甚至还会直接给出下载使用并解析的代码。
2、但是其实tensorflow已经给出了相关功能函数(read,decode,show之类的),最新版的2.0还有直接的功能库下载处理这个数据集。
3、像tensorlayer这样的二次框架,你甚至还可以自定义数据集api,只要你知道数据组织结构,按规则读取就行。
4、更高端的用法,结合google原创的数据格式,比如tfrecorder,protobuffer,json等等之类的数据格式或结构,可以进步加速前期数据供给与预处理。

准备好数据之后,你就可以专心模型构建了。
其实吧,关于cifar10,tensorflow官网github上已经有example实现了。往往很多或多或少借鉴了github上的样例代码。
我就不当搬运工了,喜欢的自己去网上查,这里我给出几个有中文注释的链接,这也是我学习过程中看到还不错的,如下:
完整操作:
https://blog.csdn.net/diligent_321/article/details/53130913
https://blog.csdn.net/leastsq/article/details/54374909
https://blog.csdn.net/shine19930820/article/details/76608648?locationNum=7&fps=1#cifar

输入部分:
https://blog.csdn.net/m0_37744293/article/details/61927582
https://blog.csdn.net/m0_37744293/article/details/62059009

cifar10/cifar100:
https://blog.csdn.net/hongxue8888/article/details/78661604

再追加一个mnist的例子:
https://www.cnblogs.com/yinzm/p/7110870.html

指数平均(滑动均值):
https://blog.csdn.net/weixin_35653315/article/details/74632110

这里其实还有一个相似的内容,那就是学习率的指数衰减,好几种衰减方式,其中有一种就是指数衰减
https://blog.csdn.net/baoqiaoben/article/details/82926472
https://blog.csdn.net/zxyhhjs2017/article/details/82383723

由于本人已经阅读过上面的所有代码,不想做重复进行复制粘贴的无用功,所以我更多的是给出了一条学习途径,避免你们少走弯路。如果有同学在学习过程中有什么不懂的,还是那样,留言,我必回复。。

一份对于tensorflow操作总结的很好的博客:
https://blog.csdn.net/lenbow?t=1

你可能感兴趣的:(人工智能-神经网络)