zoukankan      html  css  js  c++  java
  • Tensorflow数据读取的方式

    深度学习既然是基于数据的方法,先不管多抽象,那总归是有读取数据的方法的吧,这里的数据应该是一个统称,包含我们讲的数据集和变量tensor。

    tf读取数据一共有3种方法:

    • 供给数据(Feeding): 创建占位符,让Python代码来供给数据。
    • 从文件读取数据(Reading): tf可以从文件中读取数据,比如前面的Mnist和cifar10都是从文件中读取的数据集。
    • 预加载数据(Preloading): 在TensorFlow图中定义常量或变量来保存所有数据(仅适用于数据量比较小的情况)。

    供给数据(Feeding)

    tf的数据供给机制可以在tf运算图中将数据注入到任一张量中,使用placeholder创建占位符,然后通过给run()或者eval()函数输入feed_dict参数, 供给数据,才可以启动运算过程。例如:

    with tf.Session():
      input = tf.placeholder(tf.float32, shape)
      classifier = ...
      print classifier.eval(feed_dict={input: data})

     之前在Mnist中创建占位符的真实例子:

    x = tf.placeholder(tf.float32, [None, 784])
    y_ = tf.placeholder(tf.float32, [None, 10])

     None表示大小可根据实际喂进去的数据而定,可以任意大小。

    从文件读取数据(Reading)

    从文件中读取数据这部分内容比较灵活,同样,之前已经接触过类似的例子,例如在cifar10项目中使用tf.FixedLengthRecordReader()函数读取固定字节长的数据,tf官方API也给出了例子,有兴趣的可以移步,将数据导入tensorflow。但是本着带着问题去学习,在一定的需求下,接触这个问题更好。

    预加载数据(Preloading)

    加载数据集通常是可以完全加载到存储器中的小的数据集。有两种方法:

    • 存储在常数中。
    • 存储在变量中,初始化后,永远不要改变它的值。

    使用常数更简单一些,但是会使用更多的内存(因为常数会内联的存储在数据流图数据结构中,这个结构体可能会被复制几次)。例如:

    training_data = ...
    training_labels = ...
    with tf.Session():
      input_data = tf.constant(training_data)
      input_labels = tf.constant(training_labels)
      ...

    要使用变量,您还需要在构建图形之后对其进行初始化。

    training_data = ...
    training_labels = ...
    with tf.Session() as sess:
      data_initializer = tf.placeholder(dtype=training_data.dtype,
                                        shape=training_data.shape)
      label_initializer = tf.placeholder(dtype=training_labels.dtype,
                                         shape=training_labels.shape)
      input_data = tf.Variable(data_initalizer, trainable=False, collections=[])
      input_labels = tf.Variable(label_initalizer, trainable=False, collections=[])
      ...
      sess.run(input_data.initializer,
               feed_dict={data_initializer: training_data})
      sess.run(input_labels.initializer,
               feed_dict={label_initializer: training_lables})
  • 相关阅读:
    Quartz.net
    Perfview 分析进程性能
    windbg 分析cpu异常
    ansible-vault 教程
    ansible 自动化运维(2)
    简单生成随机测试数据
    基于 RabbitMQ-EasyNetQ 实现.NET与Go的消息调度交互
    自绘 TreeDataView 控件
    C# 创建音频WAVE文件头信息(*.wav)
    C# GOF 23种设计模式 学习Log【更新中】
  • 原文地址:https://www.cnblogs.com/cvtoEyes/p/9012387.html
Copyright © 2011-2022 走看看