与numpy-quaternion库

时间:2017-03-30 13:53:08

标签: python numpy tensorflow

以下代码段在最后一行崩溃,因此调用了tf.train.latest_checkpoint)

import tensorflow as tf
from tensorflow.contrib.layers.python.layers import batch_norm as batch_norm
import quaternion

latest_checkpoint = tf.train.latest_checkpoint('checkpoints/default_model/run_000')
print(latest_checkpoint)

输出是:

I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcurand.so locally
*** Error in `.../anaconda3/envs/tensorflow_env/bin/python': double free or corruption (!prev): 0x0000000001c7a850 ***

Process finished with exit code 134 (interrupted by signal 6: SIGABRT)

我在conda虚拟环境中使用Python 3.5.2,Tensorflow GPU版本0.12,Ubuntu 14.04。 import quaternion语句引用名为numpy-quaternion的外部库。

如果 batch_normquaternion导入被省略(在上面的代码段中为第二行或第三行),则不会发生错误。有人知道为什么会这样,以及如何解决它?

1 个答案:

答案 0 :(得分:0)

有两种方法可以解决/修复错误:

不要导入batch_norm

只需在代码中直接使用tf.contrib.layers.python.layers.batch_norm,从而省略import语句(诚然,会造成很多混乱)。

设置环境变量LD_PRELOAD

dennybritz于2月10日在this github issue发布的以下修补程序帮助:

sudo apt-get install libtcmalloc-minimal4
export LD_PRELOAD="/usr/lib/libtcmalloc_minimal.so.4"

请注意,如果您正在使用PyCharm,则必须在运行配置中指定此环境变量(请参阅this post)或 - 如果您将上述导出语句放入.bashrc - 你必须从命令行启动PyCharm,以便它继承环境变量(如in this post所述)。

然而,虽然这解决了这个问题,但我不知道为什么会出现这个错误,如果它应该被视为应该报告给tensorflow或numpy-quaternion devs的错误。