python - 如何从名称中获取图层的张量
问题描述
为了重用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
图中不存在操作 , 。
我究竟做错了什么?我想如何获得一个隐藏层以便重新使用它?
解决方案
这是因为tf.layers
调用内部变量的方式不同。为了能够查看它,只需像这样打印全局变量
...
logits = tf.layers.dense(dnn, 5, name="outputs", kernel_initializer=he_init)
print(tf.global_variables())
hidden = ...
你会看到,你想要得到的那个张量被称为hidden1/kernel:0
. 改个名字就OK了
tf.get_default_graph().get_tensor_by_name('hidden1/kernel:0')
推荐阅读
- database - 如何确保文档字段在 ArangoDB 集群中是唯一的
- php - 防止纯文本json中的html标签和其他符号
- javascript - 有没有办法使用循环将变量的字符串从小写变为大写?
- ios - UIConfigurationColorTransformer 如何工作?
- node.js - AWS Amplify lambda 函数无法访问突变
- lisp - 在 LISP 中创建函数 Trim-to(符号列表)
- android - Firebase 测试实验室对按大小注释的测试方法进行仪器化测试
- python - 代码在 Google Collab 中运行,但不在本地机器 python 上运行
- python - 在 pandas 中使用任意优先级进行聚合
- html - 粘在可滚动元素底部的位置