Tensorflow:将文件的全部内容精确地读取一次到单个张量中



我正在使用大约 ~300MB 的单词嵌入数据(目前是 .npz,但我愿意做翻译成任何格式的工作),我想知道是否有办法将这些数据放入 tensorflow 中,而不涉及在 python 中初始化它(即从 numpy 数组初始化tf.Variable)。

我想要避免这种情况的原因是,这样做会导致 tensorflow 在编写摘要时转储我的嵌入以及图定义。请参阅 https://github.com/tensorflow/tensorflow/issues/1444。

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

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

假设您的嵌入矩阵是 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()

最新更新