gpt4 book ai didi

python - Tensorflow 初始化给出所有 1

转载 作者:行者123 更新时间:2023-12-03 00:10:00 29 4
gpt4 key购买 nike

tensorflow 1.12.0

在下面的代码片段中,wrapped_rv_val和seq_rv_val似乎应该是等效的,但事实并非如此。相反,seq_rv_val 被正确初始化为随机生成的 init_val 数组,但wrapped_rv_val 设置为全 1。这是怎么回事?

import numpy as np
import tensorflow as tf

init_val = np.random.rand(1, 1, 16, 1).astype(np.dtype('float32'))

wrapped_rv = tf.nn.softmax(tf.get_variable('wrapped_rv', initializer=init_val))

var = tf.get_variable('seq_rv', initializer=init_val)
seq_rv = tf.nn.softmax(var, axis=2)

init_op = tf.global_variables_initializer()

with tf.Session() as sess:
sess.run(init_op)
wrapped_rv_val = sess.run(wrapped_rv)
seq_rv_val = sess.run(seq_rv)

print("seq_rv_val: {0}".format(seq_rv_val.flatten()))
print("wrapped_rv_val: {0}".format(wrapped_rv_val.flatten()))

输出:

seq_rv_val:[0.28422353 0.12556878 0.18170598 0.19684952 0.21165217]

wrapped_rv_val:[1。 1.1.1.1.]

最佳答案

事实上,当您执行以下操作时,seq_rv_valwrapped_rv_val 都将被正确初始化为随机生成的 init_val 数组

# change
wrapped_rv = tf.nn.softmax(tf.get_variable('wrapped_rv', initializer=init_val))
# to
wrapped_rv = tf.nn.softmax(tf.get_variable('wrapped_rv', initializer=init_val), axis=2)

接下来我会解释为什么wrapped_rv初始化为1。我们看一下softmax的公式。 enter image description here

当设置axis=2时,分母求和项的数量将为16。但当设置axis=-1(默认)时,分母求和项的数量将为1。因此,分子与分母相同,当您将其设置为 axis=-1 时,结果为 1。您可以运行以下示例来了解问题。

import tensorflow as tf

y = tf.constant([[1],[0],[1]],dtype=tf.float32)
y1 = tf.constant([[1],[2],[3]],dtype=tf.float32)
y2 = tf.constant([[1],[3],[7]],dtype=tf.float32)

softmax_var1 = tf.nn.softmax(logits=y1)
softmax_var2 = tf.nn.softmax(logits=y2)

with tf.Session() as sess:
print(sess.run(softmax_var1))
print(sess.run(softmax_var2))

[[1.]
[1.]
[1.]]
[[1.]
[1.]
[1.]]

关于python - Tensorflow 初始化给出所有 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55251319/

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