让我们假设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。这是我当前的...
我为我的问题找到了可能的解决方案,如果有人发现它有用,我将其发布在此处。