小编Ale*_*Sax的帖子

如何在Tensorflow中使用stop_gradient

我想知道如何stop_gradient在tensorflow中使用,文档对我来说并不清楚.

我目前正在使用stop_gradientCBOW word2vec模型中的单词嵌入来生成损失函数的梯度.我想获得价值,而不是反向传播(因为我正在生成对抗性的例子).

目前,我正在使用代码:

lossGrad = gradients.gradients(loss, embed)[0]
real_grad = lossGrad.eval(feed_dict)
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,无论如何它都会进行反向传播!我做错了什么,同样重要的是,我该如何解决这个问题呢?

澄清:通过"反向传播"来澄清我的意思是"计算值并更新模型参数".

UPDATE

如果我在第一个训练步骤之后运行上面的两行,那么在100次训练步骤之后,我得到的损失与我不运行这两行时相同.我可能从根本上误解了关于Tensorflow的一些事情.

我已经尝试set_random_seed在图形声明的开头和每个训练步骤之前使用它们.多次运行之间的总损失是一致的,但不包括/排除这两条线之间.因此,如果不是导致差异的RNG,并且在训练步骤之间没有意外更新模型参数,您是否知道会导致这种行为的原因是什么?

Welp,这有点晚了,但这就是我解决它的方式.我只想优化一些但不是全部的变量.我认为防止优化某些变量的方法是使用stop_grad- 但我从来没有找到一种方法来实现这一点.也许有一种方法,但对我有用的是调整我optimizer只对一组变量进行优化.所以代替:

opt = tf.train.GradientDescentOptimizer(learning_rate=eta)
train_op = opt.minimize(loss)
Run Code Online (Sandbox Code Playgroud)

我用了:

opt = tf.train.GradientDescentOptimizer(learning_rate=eta)
train_op = opt.minimize(loss, var_list=[variables to optimize over])
Run Code Online (Sandbox Code Playgroud)

这阻止opt了更新不在的变量var_list.希望它也适合你!

tensorflow

42
推荐指数
2
解决办法
3万
查看次数

如何在tf-slim中使用带有train_loop的evaluation_loop

我正在尝试实现一些不同的模型并在CIFAR-10上训练它们,我想用TF-slim来做到这一点.看起来TF-slim有两个在训练期间有用的主循环:train_loop和evaluation_loop.

我的问题是:使用这些循环的规范方法是什么?作为后续:是否可以使用train_loop提前停止?

目前我有一个模型和训练文件train.py看起来像这样

import ...
train_log_dir = ...

with tf.device("/cpu:0"):
  images, labels, dataset = set_up_input_pipeline_with_fancy_prefetching( 
                                                                subset='train', ... )
logits, end_points = set_up_model( images ) // Possibly using many GPUs
total_loss = set_up_loss( logits, labels, dataset )
optimizer, global_step = set_up_optimizer( dataset )
train_tensor = slim.learning.create_train_op( 
                                      total_loss, 
                                      optimizer,
                                      global_step=global_step,
                                      clip_gradient_norm=FLAGS.clip_gradient_norm,
                                      summarize_gradients=True)
slim.learning.train(train_tensor, 
                      logdir=train_log_dir,
                      local_init_op=tf.initialize_local_variables(),
                      save_summaries_secs=FLAGS.save_summaries_secs,
                      save_interval_secs=FLAGS.save_interval_secs)
Run Code Online (Sandbox Code Playgroud)

到目前为止哪个很棒 - 我的模型都很好地训练和收敛.我可以从train_log_dir所有指标朝着正确方向前进的事件中看到这一点.朝着正确的方向前进让我感到高兴.

但我想检查验证集上的指标是否有所改善.我不知道TF-slim的任何方式与训练循环很好地配合,所以我创建了第二个文件eval.py,其中包含我的评估循环.

import ...
train_log_dir = ...

with tf.device("/cpu:0"):
  images, labels, dataset = set_up_input_pipeline_with_fancy_prefetching( 
                                                                subset='validation', ... )
logits, end_points …
Run Code Online (Sandbox Code Playgroud)

tensorflow tf-slim

11
推荐指数
2
解决办法
5171
查看次数

标签 统计

tensorflow ×2

tf-slim ×1