在训练预训练张量流模型的变量时调试optmization运行

时间:2018-02-07 21:05:22

标签: python-3.x debugging tensorflow jupyter-notebook pre-trained-model

我正在加载预训练的模型,然后根据我的自定义损失仅提取我想要优化的可训练变量(基本上改变或微调)。问题是,当我将一小批数据传递给它时,它只是挂起而且没有进展。我使用Tensorboard进行可视化,但在没有可用的日志信息时不知道如何调试。我在其周围放了一些基本的印刷语句,但没有得到任何有用的信息。

只是提出一个想法,这是一段代码顺序

# Load and build the model
model = skip_thoughts_model.SkipThoughtsModel(model_config, mode="train")
with tf.variable_scope("SkipThoughts"):
    model.build()
    theta = [v for v in tf.get_collection(tf.GraphKeys.MODEL_VARIABLES, scope='SkipThoughts') if "SkipThoughts" in v.name]

# F Representation using Skip-Thoughts model
opt_F = tf.train.AdamOptimizer(learning_rate).minimize(model.total_loss, var_list=[theta])

# Training
sess.run([opt_F], feed_dict = {idx: idxTensor})

该模型来自此repository: 问题在于训练,即最后一步。我验证了theta列表不是空的它有26个元素,比如... SkipThoughts / decoder_pre / gru_cell /候选/ layer_norm / W /测试:0 SkipThoughts / decoder_pre / gru_cell /候选/ layer_norm / W /伽玛:0 SkipThoughts / logits /权重:0 SkipThoughts / logits /偏压:0 SkipThoughts / decoder_post / gru_cell /门/ layer_norm / W_H /β:0 ...

此外,即使使用tf.debug后问题仍然存在。也许它真的需要很多时间或者等待其他一些过程?所以,我也试过打破

tf.train.AdamOptimizer(learning_rate).minimize(model.total_loss, var_list=[theta]) 

进入

gvs = tf.train.AdamOptimizer(learning_rate).compute_gradients(model.total_loss, var_list=theta) 
opt_F = opt.apply_gradients(gvs)
...
g = sess.run(gvs, feed_dict = {idx: idxTensor})

这样我就可以检查是否在第一个位置计算了渐变,这个渐变位于同一点。除此之外,我还尝试用tf.gradients计算仅有一个变量的渐变,对于一个维度也是如此,但问题仍然存在。

我在Azure Cluster上使用1 GPU Tesla K80在IPython笔记本上运行这段代码。 GPU使用率在整个执行过程中保持不变,并且没有内存不足错误。

内核中断不起作用,停止它的唯一方法是重启笔记本。此外,如果我将此代码编译成Python文件,那么我也需要显式地终止该进程。但是,在任何这种情况下,我都没有得到堆栈跟踪来知道它被卡住的确切位置!如何调试这样的问题?

非常感谢这方面的任何帮助和指示。

0 个答案:

没有答案