gpt4 book ai didi

python - Tensorflow:tf.assign 不分配任何东西

转载 作者:太空宇宙 更新时间:2023-11-04 00:26:42 25 4
gpt4 key购买 nike

我正在尝试实现批量归一化操作的一些微调版本;其中我需要明确保留移动平均值,如均值和方差。为了做到这一点,我正在对 Tensorflow 中的分配和控制依赖机制进行一些实验,但我遇到了一个神秘的问题。我有以下玩具代码;我在其中尝试测试 tf.control_dependencies 是否按预期工作:

dataset = MnistDataSet(validation_sample_count=10000, 
load_validation_from="validation_indices")
samples, labels, indices_list, one_hot_labels =
dataset.get_next_batch(batch_size=GlobalConstants.BATCH_SIZE)
samples = np.expand_dims(samples, axis=3)

flat_data = tf.contrib.layers.flatten(GlobalConstants.TRAIN_DATA_TENSOR)
mean = tf.Variable(name="mean", initial_value=tf.constant(100.0, shape=[784], dtype=tf.float32),
trainable=False, dtype=tf.float32)
a = tf.Variable(name="a", initial_value=5.0, trainable=False)
b = tf.Variable(name="b", initial_value=4.0, trainable=False)
c = tf.Variable(name="c", initial_value=0.0, trainable=False)
batch_mean, batch_var = tf.nn.moments(flat_data, [0])

b_op = tf.assign(b, a)
mean_op = tf.assign(mean, batch_mean)
with tf.control_dependencies([b_op, mean_op]):
c = a + b

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

results = sess.run([c, mean], feed_dict={GlobalConstants.TRAIN_DATA_TENSOR: samples})

我只是加载一个数据批处理,每个条目都有 784 个维度,计算它的矩并尝试将 batch_mean 存储到变量 mean 中。我也简单地将变量 a 的值存储到 b 中。

在最后一行中,当我针对 cmean 的值运行图形时,我看到 c 为 10,即期望值。但是 mean 仍然是一个 100 的向量,并且不包含批处理均值。就像 mean_op = tf.assign(mean, batch_mean) 还没有被执行。

这可能是什么原因?据我所知,tf.control_dependencies 调用中的所有操作必须在以下上下文中的任何操作之前执行;我这里明确调用了c,在上下文中。我错过了什么吗?

最佳答案

这是一个 known "feature" tf.Session.run()cmean 操作是独立的,因此 mean 可以在 c 之前评估(这将更新 意思是).

这是此效果的简化版本:

a = tf.Variable(name="a", initial_value=1.0, trainable=False)
b = tf.Variable(name="b", initial_value=0.0, trainable=False)
dependent_op = tf.assign(b, a * 3)
with tf.control_dependencies([dependent_op]):
c = a + 1

with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run([c, b]))
print(sess.run([b]))

b 的第二次评估保证返回 [3.0]。但是第一个 run 可能会返回 [2.0 3.0][2.0 0.0]

关于python - Tensorflow:tf.assign 不分配任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47203019/

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