gpt4 book ai didi

python - Dense.get_weights() 与 Dense.weights

转载 作者:行者123 更新时间:2023-12-01 09:08:34 25 4
gpt4 key购买 nike

为什么 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]]

最佳答案

在您的代码中实际上有两个 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.

为什么有两个 session ?

第一个是你自己的sess对象,这个对象并不是很神秘。

第二个是通过调用 get_weights() 隐式创建的,如果未设置 TensorFlow 的默认 session ,它将为您创建一个新的 session 实例。由于您在 with 子句之外使用 sess,因此尚未设置默认 session ,并且 get_weights() 会默默创建一个新 session 为你。当您在 with 子句中设置 tf.Session() 时,它会在 tfget_weights 中设置默认 session () 将默默地(并且更有帮助)重用您的 session 对象。

如果你非常好奇,偷偷地为你创建另一个 session 的实际函数是(在tensorflow中的keras中)keras.backend.get_session() .

关于python - Dense.get_weights() 与 Dense.weights,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51849114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com