首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dense.get_weights()对Dense.weights

Dense.get_weights()对Dense.weights
EN

Stack Overflow用户
提问于 2018-08-14 20:14:42
回答 1查看 261关注 0票数 1

为什么get_weights()返回与实际权重不同的权重值?我认为在初始化之后,两种方法都应该显示相同的权重。

代码语言:javascript
复制
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]]}))

输出

代码语言:javascript
复制
[array([[-0.26290017],
    [ 0.11782396],
    [ 0.51118207]], dtype=float32)]
[array([[-0.12011003],
    [ 0.13160932],
    [ 1.1303514 ]], dtype=float32)]
------------------
[[1.1418507]]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-14 21:04:44

在您的代码中,实际上有两个tf.Session()实例;修复方法是将sess的使用包含在一个with子句中,如下所示:

代码语言:javascript
复制
# 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()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51849114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档