为什么get_weights()返回与实际权重不同的权重值?我认为在初始化之后,两种方法都应该显示相同的权重。
import tensorflow as tf
import os
sess = tf.Session()
x = tf.placeholder(tf.float32, shape=[None, 3])
linear_model = tf.layers.Dense(units=1,use_bias=False,activation=None)
y = linear_model(x)
init = tf.global_variables_initializer()
sess.run(init)
print(linear_model.get_weights())
print(sess.run(linear_model.weights))
print('------------------')
print(sess.run(y, {x: [[1, 1, 1]]}))输出
[array([[-0.26290017],
[ 0.11782396],
[ 0.51118207]], dtype=float32)]
[array([[-0.12011003],
[ 0.13160932],
[ 1.1303514 ]], dtype=float32)]
------------------
[[1.1418507]]发布于 2018-08-14 21:04:44
在您的代码中,实际上有两个tf.Session()实例;修复方法是将sess的使用包含在一个with子句中,如下所示:
# Define your graph.
with tf.Session() as sess:
# All calls to tf.run() or linear_model.get_weights() go in this clause.为什么有两个疗程?
第一个是您自己的sess对象,它不是很神秘。
第二个是通过调用get_weights()隐式创建的,如果没有设置TensorFlow的默认会话,它将为您创建一个新的会话实例。因为在sess子句之外使用的是with,所以没有设置默认会话,get_weights()为您默默地创建了一个新会话。当您在tf.Session()子句中设置with时,它确实在tf中设置了默认会话,get_weights()将默默地(更有帮助地)重用您的session对象。
如果您非常好奇,偷偷为您创建另一个会话的实际函数是(在tensorflow中的keras ) keras.backend.get_session()。
https://stackoverflow.com/questions/51849114
复制相似问题