为了重用DNN模型的某些隐藏层,我想获取一个隐藏层的张量
这里有一个我想做的简单例子:
import tensorflow as tf
graph = tf.Graph()
with graph.as_default():
X = tf.placeholder(tf.float32, shape=(None, 28*28), name="X")
y = tf.placeholder(tf.int64, shape=(None), name="y")
dnn = X
he_init = tf.contrib.layers.variance_scaling_initializer()
for idx, n_hidden in enumerate([10, 10, 10]):
dnn = tf.layers.dense(dnn, n_hidden, name="hidden{}".format(idx), kernel_initializer=he_init, activation=tf.nn.relu)
logits = tf.layers.dense(dnn, 5, name="outputs", kernel_initializer=he_init)
hidden = tf.get_default_graph().get_tensor_by_name("hidden1:0")
在get_tensor_by_name
函数中,如果我给出X而不是hidden1
,它可以工作,但不适用于hidden1。
在进行完训练后,我也打电话给get_tensor_by_name
(此处未显示)。
TensorFlow报告操作hidden1
在图中不存在。
我在做什么错?我应该如何获得一个隐藏层以便重复使用?
答案 0 :(得分:0)
这是因为tf.layers
调用内部变量的方式不同。
为了能够查看它,只需打印这样的全局变量
...
logits = tf.layers.dense(dnn, 5, name="outputs", kernel_initializer=he_init)
print(tf.global_variables())
hidden = ...
您会看到,您尝试获取的张量称为hidden1/kernel:0
。更改名称就可以了
tf.get_default_graph().get_tensor_by_name('hidden1/kernel:0')