1

我最近需要在 tensorflow 中初始化一个大的嵌入矩阵(大于 2GB),并且大小达到了协议缓冲区的 2GB 限制。

我搜索了 stackoverflow 以寻求帮助,并且能够很好地解释在这种情况下使用占位符的出色答案。虽然占位符解决方案效果很好,但我发现以下使用 tf 初始化程序的解决方案也适用,但我不明白为什么这个解决方案不会成为 2GB 限制的问题。

import tensorflow as tf    
mb = 2 ** 20
gb = 2 ** 30
tf.reset_default_graph()
with tf.Session() as sess:
    value = tf.random_uniform([2 * gb]) # using np.random.randn will break the limit
    v = tf.get_variable("v", initializer=value, dtype=tf.float32)
    sess.run(tf.global_variables_initializer())
    print(sess.run(v[:10]))
    graph = tf.get_default_graph()
    print(graph.as_graph_def().ByteSize() / mb) # 0.0012083053588867188

这是否可行,因为tf.random*初始化程序在内部检查要生成的张量的形状并相应地切换到占位符实现?但是,如果我们在 tensorboard 上查看图表,我们将不会在图表中看到任何占位符节点。

谢谢!

4

0 回答 0