Tensorflow.cifar_我的数据下载过程

ZC:这个过程中,数据是怎么下载下来的,又是 怎么从 bin文件 变成 tfrecord文件 的,都不是 我此时(20190903)的重点。

ZC:此时的重点是 tensorflow的结构用法等的知识(层啊什么的),这里面 还有好多东西要学习。

ZC:只要能从文件中提取出 图片&标签 的信息,能将 tensorflow的各种训练测试跑起来就行,至于是从bin文件中提取还是从tfrecord文件中提取就无所谓。

ZC:bin文件 & tfrecord文件 的格式学习,相互转换,以后有时间再说吧...

 

1、代码来自:“tensorflow/models/image/cifar10/”(可以用github上的,也可以用我Copy下来的地址"https://gitee.com/zclxy/models_tensorflow/tree/master/tutorials/image/cifar10")(该地址是 文章“卷积神经网络 - TensorFlow 官方文档中文版 - 极客学院Wiki.html [http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/deep_cnn.html]”中提供的)

 ZC:但是一个问题,我自己下载下来的代码 不知道该怎么用,怎么都说 找不到 dataset,也不知道 到底该把文件放在哪个目录下...

2、(20190903)在SH把数据下载下来了,在家 连不上。默认的下载存放地址是:"C:\Users\Administrator\tensorflow_datasets",下载下来的 文件 已经打包成"tensorflow_datasets_20190903_0846_cifar10.rar"(ZC:这是 cifar10的dataset,函数_get_images_labels(...)的参数split的值是tfds.Split.TRAIN)(ZC:同样的方式,下载了 一份 "tensorflow_datasets_20190904_0813_cifar100.rar")

 2.1、下载的程序:tensorflow/models/image/cifar10/cifar10_input.py 里面的 函数_get_images_labels(...),没找到 是从哪里下载数据的...(也没抓包什么的...)

 2.2、查看下载好的文件目录:(C:\Users\Administrator\tensorflow_datasets)

  (1)文件夹cifar10:里面只有一个 文件夹1.0.2,里面是 tfrecord文件,发现这里面的文件,就是 程序"tensorflow/models/image/cifar10/"需要的文件

  (2)文件夹downloads:里面是下载的文件 和 下载后解压的文件。

  2.2.1、从文件时间上来看,顺序应该是:先在"文件夹downloads"中下载了 文件"cs.toronto.edu_kriz_cifar-10-binaryxKOMUKG8XzocVTfyFVq51o-fJese2Nnd2j2ymlm8od0.tar.gz",然后解压文件到 文件夹extracted 中,解压后的文件 就是 各个".bin"文件。  

    然后再在"文件夹cifar10"中 生成 各个".tfrecord"文件

  2.2.2、但是,"?.bin"文件 是如何 变成 "?.tfrecord"文件 的,暂时不明...

  2.2.3、从下载下来的 文件"C:\Users\Administrator\tensorflow_datasets\cifar10\1.0.2\dataset_info.json"中看到,下载的地址貌似就是"https://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz"

3、测试使用 本地下载下来的文件(不需要 每次都下载的方式)(只是测试了 cifar10_input.py的 函数_get_images_labels(...),调用的语句为:“distorted_inputs(128)”)

 3.1、把 文件夹"cifar10\1.0.2" 复制到 "G:\ddd\"中,然后,下载的代码使用 "dataset = tfds.load(name='cifar10', split=split, data_dir="G:\\ddd", download=False)" 是OK的。

  ZC:我把"distorted_inputs(128)" 改成 "distorted_inputs(64)"或者"distorted_inputs(256)",分别运行 都是OK的... (我还以为 tfrecord文件有这么多个 是通过 参数batch_size来分割的...现在看来 肯定不全对)

  (1) 然后把 文件夹"1.0.2"改名为"1.0.5",执行代码会报错:

W0903 10:39:02.001605  6612 dataset_builder.py:575] Found a different version 1.0.5 of dataset cifar10 in data_dir G:\ddd. Using currently defined version 1.0.2.
  ...
  ... AssertionError: Dataset cifar10: could not find data in G:\ddd. Please make sure to call dataset_builder.download_and_prepare(), or pass download=True to tfds.load() before trying to access the tf.data.Dataset object. Process finished with exit code 1

   ZC:说明 版本要对应好,貌似 代码里面 还是去服务器端 核对了一下版本等信息??

 3.2、测试,将"C:\Users\Administrator\tensorflow_datasets\downloads"整个文件夹 复制到 "G:\ddd\"中,然后 删除 "G:\ddd\cifar10\"里面的全部文件,再次运行程序,发现 它没有自动的用 "G:\ddd\downloads"里面的文件 自动的生成 tfrecord文件,而是报错:“AssertionError: Dataset cifar10: could not find data in G:\ddd. ... ...”

 

 3.3、然后就像看看,"?.bin"文件 变成 "?.tfrecord"文件 到底是一个什么样的过程

  (1)看到 "tensorflow/models/image/cifar10_estimator/"中 有个文件"generate_cifar10_tfrecords.py",尝试 使用 它 来将 "cifar-10-python.tar.gz" 转成 "?.tfrecord"文件,但是 生成的文件(3个:eval.tfrecords、train.tfrecords、validation.tfrecords)  用  cifar10_input.py的 函数_get_images_labels(...) 来测试,直接 程序崩溃,控制台的信息是:"Process finished with exit code -1073741819 (0xC0000005)"

    ZC:注意到 "C:\Users\Administrator\tensorflow_datasets\cifar10\1.0.2"里面的文件后缀 和 "validation.tfrecords" 是不同的...

4、

5、资料:

 (1) TensorFlow可以“预装”数据集了,新功能Datasets出炉_splits.html(http://www.sohu.com/a/298094007_610300

  里面提供的资料链接:

  TensorFlow博客原文  (ZC:我没FQ(20190903),连不上)
    https://medium.com/tensorflow/introducing-tensorflow-datasets-c7f01f7e19f3

  TensorFlow官方文档    (ZC:我没FQ(20190903),连不上)
    https://www.tensorflow.org/datasets

  GitHub  (ZC:连得上(20190903))
    https://github.com/tensorflow/datasets

  Colab教程    (ZC:我没FQ(20190903),连不上)
    https://colab.research.google.com/github/tensorflow/datasets/blob/master/docs/overview.ipynb

 

 

6、函数调用:

 6.1、

  tensorflow/models/image/cifar10/cifar10_input.py --> _get_images_labels(...) 中 “ tfds.load(name='cifar10', split=split, data_dir="G:\\ddd", download=False) ”

  --> 键盘Ctrl+B --> C:\Program Files\Python37\Lib\site-packages\tensorflow_datasets\core\registered.py 函数:

    @api_utils.disallow_positional_args(allowed=["name"])
    def load(name, split=None, data_dir=None, batch_size=None, in_memory=None, shuffle_files=None, download=True,
      as_supervised=False, decoders=None, with_info=False, builder_kwargs=None,
      download_and_prepare_kwargs=None, as_dataset_kwargs=None, try_gcs=False)

   里面 这一句"dbuilder = builder(name, data_dir=data_dir, **builder_kwargs)" 不知道是创建的哪个类的对象,CTRL+B指向2个类 但是我看调用的代码 都不太像... 于是在2个累的构造函数中都打印信息,确认是其中一个 为类DatasetBuilder(非类EmptyDatasetBuilder)

    在 类DatasetBuilder的构造函数中,基本是 确定版本,确定路径等的操作,后者 看了明白了,前者没明白是怎么取版本号的?是和服务端有通信(没找到)?还是 根据当前的tensorflow的版本来确定的(感觉可能是这个)?

    PS:类DatasetBuilder 的代码 位于文件"C:\Program Files\Python37\Lib\site-packages\tensorflow_datasets\core\dataset_builder.py"

  --> DatasetBuilder.download_and_prepare(...)  ZC:粗看了一下,貌似只是在下载文件。但是感觉 download_and_prepare(...)和_download_and_prepare(...)等函数 又像是在处理下载后的数据

  --> DatasetBuilder.as_dataset(...)  ZC:"?.bin"文件 变成 "?.tfrecord"文件  操作是在这里做的吗?

  6.1.1、在 文件"C:\Program Files\Python37\Lib\site-packages\tensorflow_datasets\core\dataset_builder.py"中搜索 tfrecord(看看能不能找到 和 文件名类似的代码行),只有一处“fname = "{}-{}.tfrecord".format(self.name, split_generator.name)”,它位于 函数_prepare_split(...)中。

   反着找,本文件中 只有 FileAdapterBuilder._download_and_prepare(...)在调用_prepare_split(...)

  ZC:疑问,在 DatasetBuilder.download_and_prepare(...)中 对 代码"self._download_and_prepare(dl_manager=dl_manager, download_config=download_config)" 设置断点,但是 怎么"Steo Into" 会跟到 GeneratorBasedBuilder._download_and_prepare(...) 又来到 FileAdapterBuilder._download_and_prepare(...) ?  我擦 我发现  GeneratorBasedBuilder的父类是 FileAdapterBuilder,后者的父类是DatasetBuilder,而 tensorflow_datasets.image.cifar.Cifar10的父类 就是 GeneratorBasedBuilder ...  我说呢 怎么父类在调用子类的函数,这么怪异,还以为 python还能这么玩,没想到是自己想多了,没有看完整...

7、

8、

9、

 

posted @ 2019-09-03 08:42  pythonz  阅读(2116)  评论(0编辑  收藏  举报