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})
  • 相关阅读:
    BestCoder6 1002 Goffi and Squary Partition(hdu 4982) 解题报告
    codeforces 31C Schedule 解题报告
    codeforces 462C Appleman and Toastman 解题报告
    codeforces 460C. Present 解题报告
    BestCoder3 1002 BestCoder Sequence(hdu 4908) 解题报告
    BestCoder3 1001 Task schedule(hdu 4907) 解题报告
    poj 1195 Mobile phones 解题报告
    二维树状数组 探索进行中
    codeforces 460B Little Dima and Equation 解题报告
    通过Sql语句控制SQLite数据库增删改查
  • 原文地址:https://www.cnblogs.com/cvtoEyes/p/9012387.html
Copyright © 2011-2022 走看看