Tensorflow:将文件的全部内容完全读入单个张量

时间:2016-03-09 22:24:37

标签: tensorflow

我正在处理大约300MB的字嵌入数据(目前是.npz,但我愿意将这些工作翻译成任何格式),我想知道是否有是一种将数据转换为张量流的方法,它不涉及在python中初始化它(即从numpy数组初始化tf.Variable)。

我想避免这种情况的原因是这样做会导致张量流在编写摘要时将我的嵌入与图表定义一起转储。请参阅https://github.com/tensorflow/tensorflow/issues/1444

对于我的训练数据,我使用普通的tensorflow阅读器管道(TFRecordReader,文件名队列,tf.train.shuffle_batch)。这非常适合于读取预定数量的时期的固定大小的批量示例。我不知道该怎么做是将文件的全部内容读入单张量。我可以通过阅读一个完整大小的嵌入式批量来轻松解决这个问题,但我想要一个更通用的解决方案,它不依赖于知道记录的数量,只是个人记录格式。

1 个答案:

答案 0 :(得分:4)

实现此目标的最简单方法是通过从tf.Variable初始化来创建适当类型和形状的tf.placeholder(),然后使用Feed机制传入值。因此,实际值永远不会出现在图表本身中。

我们假设你的嵌入矩阵是1000 x 100:

embedding_init = tf.placeholder(tf.float32, shape=[1000, 100])
embedding = tf.Variable(embedding_init)

然后,您可以使用.npz文件中的值初始化变量:

datafile = numpy.load("data.npz")
embedding_value = datafile["embedding"]

sess = tf.Session()
sess.run(tf.initialize_all_variables(),
         feed_dict={embedding_init: embedding_value})

datafile.close()