在函数内部获取张量的值会破解程序

时间:2019-08-30 13:43:16

标签: python tensorflow keras

我正在使用keras / tensorflow,我有一个Single Shot Detector(SSD)模型,该模型在某个时候使用损耗函数,该函数采用y_truey_pred并计算损耗值。

我有兴趣记录本地化和分类损失,因此我尝试调试提供的损失功能。因为,这两个张量都是我试图通过调用来获取值的:

y_true_np = tf.keras.backend.get_value(y_true)
y_pred_np = tf.keras.backend.get_value(y_pred)

在我的情况下会产生CUDA_ERROR_OUT_OF_MEMORY错误。奇怪的是,由于没有足够的GPU内存(我正在那里进行另一个实验),我在CPU(和RAM)中运行了调试程序。

使用tf.keras.backend.eval(y_true)时也会发生同样的事情(老实说,我不确定这两者之间有什么区别)。

似乎keras试图通过创建一个新的会话(?)并在那里进行评估来返回我要求的值?是这样吗如果是这样,那是为什么呢?另外,如果我尝试强制在CPU中对其进行评估,即使没有上述命令,相同的命令(通过配置文件)也可以正常工作,但它仍会失败。

有人可以解释为什么我会出现这种现象吗?如果我能以某种方式获得张量的实际值。

编辑:

我正在使用的实际代码来自here,但是我不确定是否可以将其简化为一个简单的代码。也许有可能,但是我可能缺少一些其他信息。我所面临的实际问题似乎并不是特定于项目的,并且可能对keras中的每个损失函数都起作用。无论如何,实际损失函数为this one(来自同一项目)。

0 个答案:

没有答案