相关疑难解决方法(0)

在"tensorflow"中"冻结"一些变量/范围:stop_gradient vs传递变量以最小化

我正在尝试实施Adversarial NN,它需要在交替训练小批量时"冻结"图形的一个或另一个部分.即有两个子网:G和D.

G( Z ) ->  Xz
D( X ) ->  Y
Run Code Online (Sandbox Code Playgroud)

其中损失函数G取决于D[G(Z)], D[X].

首先,我需要在D中训练所有G参数固定的参数,然后在G中参数D中的参数固定.第一种情况下的损失函数将是第二种情况下的负损失函数,并且更新将必须应用于第一或第二子网的参数.

我看到张量流有tf.stop_gradient功能.为了训练D(下游)子网,我可以使用此功能来阻止梯度流

 Z -> [ G ] -> tf.stop_gradient(Xz) -> [ D ] -> Y
Run Code Online (Sandbox Code Playgroud)

tf.stop_gradient是非常简洁的注释,没有内联示例(例子seq2seq.py太长而且不容易阅读),但看起来它必须在图形创建期间调用.这是否意味着如果我想在交替批次中阻止/解除阻塞梯度流,我需要重新创建并重新初始化图模型?

也似乎无法阻止流经G(上游)网络的梯度tf.stop_gradient,对吧?

作为替代方案,我看到可以将变量列表传递给优化器调用opt_op = opt.minimize(cost, <list of variables>),如果可以在每个子网的范围内获取所有变量,这将是一个简单的解决方案.可以获得<list of variables>一个tf.scope吗?

python tensorflow

53
推荐指数
3
解决办法
4万
查看次数

如何在Tensorflow中设置分层学习率?

我想知道是否有一种方法可以为不同的层使用不同的学习率,就像Caffe中的那样.我正在尝试修改预先训练的模型并将其用于其他任务.我想要的是加快新增加的层的训练,并使训练好的层保持低学习率,以防止它们被扭曲.例如,我有一个5-conv层预训练模型.现在我添加一个新的转换层并对其进行微调.前5层的学习率为0.00001,最后一层的学习率为0.001.知道怎么做到这一点?

python deep-learning tensorflow

46
推荐指数
4
解决办法
2万
查看次数

Session.run(fetches)是否保证按顺序执行其"fetches"参数?

Session.run(fetches, feed_dict)保证执行其fetches有序参数呢?

文档似乎没有提到它.

例如,如果你跑

sess.run([accuracy, train_op], feed_dict=feed_dict)
Run Code Online (Sandbox Code Playgroud)

执行的顺序很重要:train_op将更新影响的参数accuracy.

python machine-learning tensorflow

6
推荐指数
1
解决办法
1779
查看次数