tf.stop_gradient与优化程序的输入变量之间的张量差?

问题描述 投票:0回答:1

我正在尝试在自我监督学习中训练模型。流程图如下所示:enter image description here

让我们假设N1已经受过训练,而我们只想训练N2。这是我当前的实现:

x_1 = tf.placeholder(tf.float32, [None, 128, 128, 1])
x_2 = tf.placeholder(tf.float32, [None, 128, 128, 1])

s_t1 = tf.stop_gradient(N1(x_1))  # treat s_t1 as a constant
s_t2_pred = N2(s_t1)) 
s_t2 = tf.stop_gradient(N1(x_2))  # treat s_t2 as a constant

loss = some_loss_function(s_t2, s_t2_pred)
train_op = tf.train.AdamOptimizer(lr).minimize(loss)

这样,我应该只优化N2。让我感到困惑的是,如果我使用以下代码,我将获得截然不同的结果(比上面的代码好得多):

# treat everything as a variable:
s_t1 = N1(x_1)
s_t2_pred = N2(s_t1)
s_t2 = N1(x_2)

loss = some_loss_function(s_t2, s_t2_pred)
var_list = take_all_variables_in_N2()
train_op = tf.train.AdamOptimizer(lr).minimize(loss, var_list)

我想知道第一个实现有什么问题。 tf.stop_gradient的确切行为是什么(文档有点差)?这与第二种方法有何不同?

[从半监督学习的实践角度来看:两者有什么区别?哪种方法是正确的?

谢谢:)



我在下面的评论中为该问题添加了可能的解决方案。我仍然很乐意收到更多有经验的用户的反馈,并就构建张量流中自我监督学习问题的最佳方法分享一些意见。

再见,G。

我正在尝试在自我监督学习中训练模型。流程图如下所示:假设已经训练了N1,而我们只想训练N2。这是我当前的...

tensorflow variables optimization gradient
1个回答
0
投票

我为我的问题找到了可能的解决方案,如果有人发现它有用,我将其发布在此处。

© www.soinside.com 2019 - 2024. All rights reserved.