如何在Tensorflow中打印重量?

时间:2018-03-16 07:42:37

标签: python tensorflow

我正在尝试获取hidden_​​layer2的权重矩阵并将其打印出来。 看起来我能够得到重量矩阵,但我无法打印它。

使用tf.Print(w, [w])时,它什么都不打印。 使用print(tf.Print(w,[w])时,它至少打印有关张量的信息:

Tensor("hidden_layer2_2/Print:0", shape=(3, 2), dtype=float32)

我还尝试在之外使用tf.Print() -Statement,结果相同。

完整代码在这里,我只是处理前馈NN中的随机数据:https://pastebin.com/KiQUBqK4

我的代码的一部分:

hidden_layer2 = tf.layers.dense(
        inputs=hidden_layer1,
        units=2,
        activation=tf.nn.relu,
        name="hidden_layer2")


with tf.variable_scope("hidden_layer2", reuse=True):
        w = tf.get_variable("kernel")
        tf.Print(w, [w])
        # Also tried tf.Print(hidden_layer2, [w])

6 个答案:

答案 0 :(得分:1)

我相信这里有多个问题要解决。

  1. 运行eval()时应伴随一个会话。根据{{​​3}}中的建议,.eval()希望正在运行默认会话,而在您之前的情况下这是不可能的。因此,最好的选择是在代码之前加上会话。从您的评论中,我们可以看到已经完成。

  2. 图形完成后,需要初始化隐藏层中的变量(即权重/内核)。因此,您可能想要使用类似于以下内容的东西:

    
    init = tf.global_variables_initializer()
    sess = tf.Session()
    sess.run(init)
    with tf.variable_scope("hidden_layer2", reuse=True):
        w = tf.get_variable("kernel")
        print(w.eval(session=sess))
    
    

答案 1 :(得分:1)

针对TENSORFLOW 2.0更新

在TensorFlow 2.0中,由于Session对象已消失并且推荐的高级后端是Keras,因此获得权重的方法是:

from tensorflow.keras.applications import MobileNetV2

model = MobileNetV2(input_shape=[128, 128, 3], include_top=False) #or whatever model
print(model.layers[0].get_weights()[0])

答案 2 :(得分:0)

尝试这样做,

w = tf.get_variable("kernel")
print(w.eval())

答案 3 :(得分:0)

我采取了另一种方法。首先,我列出所有可训练的变量,并使用所需变量的索引,并在当前会话中运行它。该代码附在下面:

variables = tf.trainable_variables()

init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

print("Weight matrix: {0}".format(sess.run(variables[0])))  # For me the variable at the 0th index was the one I required

答案 4 :(得分:0)

有关如何在namespace TEST { class Program { public delegate int Parsing(string parsee); static void Main(string[] args) { Parsing parsee = new Parsing(Parse); Console.WriteLine(); } public static int Parse(string arrayString) { Console.WriteLine("Write the version numbers : "); var input = Console.ReadLine(); string[] arrayString = input.Split('-'); List<int> listInt = new List<int>(); foreach (string i in arrayString) { listInt.Add(Convert.ToInt32(i)); } listInt.ToArray(); foreach (var item in listInt) { Console.WriteLine(item); } return listInt; } } } 中每层打印权重的示例:

tensorflow.js

答案 5 :(得分:0)

作为Tensorflow 2中Timbus Calin答案的更新,也可以使用get_weights(),特别是get_weights()[1]访问偏见。

例如在前馈网络中访问和打印权重和偏差:

for layer in self.model.layers:
      print(layer.get_weights()[0]) # weights
      print(layer.get_weights()[1]) # biases