以下代码段在最后一行崩溃,因此调用了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_norm
或quaternion
导入被省略(在上面的代码段中为第二行或第三行),则不会发生错误。有人知道为什么会这样,以及如何解决它?
答案 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的错误。