在 TensorFlow 中,当张量具有大维度时,出于调试目的仅打印张量的一部分是有用的,例如二维矩阵的对角线。我只知道如何打印整个张量如下:
sess = tf.InteractiveSession()
a = tf.constant(1.0, shape=[1000, 1000])
a = tf.Print(a, [a], "print entire a\n", summarize=1000000)
b = a + 1.
ret = sess.run(b)
Run Code Online (Sandbox Code Playgroud)
上面的代码将打印整个“a”张量。但我不确定如何打印“a”的一部分。例如,如果我只想打印 a[0,0] 而不执行 sess.run(a),则以下代码将不起作用:
sess = tf.InteractiveSession()
a = tf.constant(1.0, shape=[1000, 1000])
a[0,0] = tf.Print(a[0,0], [a[0,0]], "print part of a\n", summarize=1000000)
b = a + 1.
ret = sess.run(b)
Run Code Online (Sandbox Code Playgroud) 在 Tensorflow 中,我的模型基于预训练模型,我添加了更多变量并删除了预训练模型中的一些变量。当我从检查点文件中恢复变量时,我必须明确指定我添加到图中需要排除的所有变量。例如,我做了
exclude = # explicitly list all variables to exclude
variables_to_restore = slim.get_variables_to_restore(exclude=exclude)
saver = tf.train.Saver(variables_to_restore)
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法来做到这一点?即,只要变量不在检查点中,就不要尝试恢复。
shuffle对于中等的buffer_size(例如1000),以下代码中的步骤非常慢:
filenames = tf.constant(filenames)
dataset = tf.data.Dataset.from_tensor_slices((filenames, labels))
dataset = dataset.map(_parse_function)
dataset = dataset.batch(batch_size)
dataset = dataset.shuffle(buffer_size)
Run Code Online (Sandbox Code Playgroud)
如果我们使用numpy随机数据,则代码如下所示:
idx = np.arange(len(filenames))
np.random.shuffle(idx)
new_filenames = [filenames[i] for i in idx]
next_batch_filenames = new_filenames[:batch_size]
# get the corresponding files in batch
Run Code Online (Sandbox Code Playgroud)
这要快得多。我想知道TF是否可以做一些超出随机整理数据的事情。
tensorflow ×3