我有一个可以做很多事情的转发网。
推理代码如下所示:
conv0_feature_count = 2
with tf.variable_scope('conv0') as scope:
kernel = _variable_with_weight_decay('weights', shape=[5, 5, 1, conv0_feature_count], stddev=5e-2, wd=0.0)
conv = tf.nn.conv2d(images, kernel, [1, 1, 1, 1], padding='SAME')
biases = _variable_on_cpu('biases', [conv0_feature_count], tf.constant_initializer(0.0))
bias = tf.nn.bias_add(conv, biases)
conv0 = tf.nn.relu(bias, name=scope.name)
依此类推,然后是最大合并等等。
我希望能够将conv0保存到文件中进行检查。我知道tf.Print会在控制台中打印这些值,但这是一个很大的张量。打印该值毫无意义。
答案 0 :(得分:5)
TensorFlow没有任何公共运算符可以将张量写入文件,但是如果你看一下tf.train.Saver
的实现(特别是BaseSaverBuilder.save_op()
方法),你会看到它包含一个可以将一个或多个张量写入文件的操作的实现,它用于编写检查点。
CAVEAT:以下解决方案依赖于内部实现,可能会发生变化,但适用于TensorFlow r0.10rc0。
以下代码片段将张量t
写入名为"/tmp/t.ckpt"
的文件中:
import tensorflow as tf
from tensorflow.python.ops import io_ops
t = tf.matmul(tf.constant([[6, 6]]), tf.constant([[2], [-1]]))
save_op = io_ops._save(filename="/tmp/t.ckpt", tensor_names=["t"],
tensors=[t])
sess = tf.Session()
sess.run(save_op) # Writes `t` to "/tmp/t.ckpt".
要阅读该值,您可以使用tf.train.NewCheckpointReader()
,如下所示:
reader = tf.train.NewCheckpointReader("/tmp/t.ckpt")
print reader.get_tensor("t") # ==> "array([[6]], dtype=int32)"