一、问题描述
跑了点神经网络的代码,想画几个激活函数的图像,代码如下:
运行后报了以下错误:
翻译如下:
OMP:错误 #15:正在初始化 libiomp5md.dll,但发现 libiomp5md.dll 已经初始化。
OMP:提示 这意味着 OpenMP 运行时的多个副本已链接到程序中。 这很危险,因为它会降低性能或导致不正确的结果。 最好的办法是确保只有一个 OpenMP 运行时链接到进程中,例如 通过避免在任何库中静态链接 OpenMP 运行时。 作为一种不安全、不受支持、未记录的解决方法,您可以设置环境变量 KMP_DUPLICATE_LIB_OK=TRUE 以允许程序继续执行,但这可能会导致崩溃或静默产生不正确的结果。 有关详细信息,请参阅 http://www.intel.com/software/products/support/。
二、原因分析
- 将绘图代码注释后不再报错,不知是何原因。
- 通过错误信息来看,应该是要初始化一个新的
libiomp5md.dll
,但libiomp5md.dll已经存在,在anaconda的目录下搜索该文件发现目录下确实有多个该配置文件。但哪个能删哪个有用也说不好,遂于CSDN查找答案。
三、解决方案
1. 情况一:numpy或其他
(1)将numpy降级1;
(2)根据第二条提示信息,可以设置环境变量 KMP_DUPLICATE_LIB_OK=TRUE。添加以下代码, 该语句建议放在文件的顶部2,保证前后顺序,不要在这两个语句之间插入其他语句。
import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'
但“治标不治本”,每个文件都要添加,且可能对某些情况是暂时可用的,也有可能导致崩溃或者产生错误结果。
2.情况二: 之前无任何下载安装等其他异常操作,但使用时报错。
根据python interpreter的路径,删除其目录下多余的libiomp5md.dll
(记得备份文件和存储路径),不过可能会造成其他未知的问题。
- 如果是在Anaconda的base环境下,删除…\anaconda3\Library\bin\libiomp5md.dll(目录中的第二个,第一个是torch下的);
- 如果是在某个env(例如名为work)下:删除…\Anaconda3\envs\work\Library\bin\libiomp5md.dll
我的是在Anaconda的base环境下,所以删了第二个 - 删除文件需要谨慎
3.情况三:使用matplotlib导致
(1)可能是该库被影响了,那么可以尝试一下conda install nomkl
对该包进行安装,但这种方式似乎只适用于Max OS,我用不了。
(2)如果Python是基本于Conda安装的,则Conda上的numpy包中的mkl很容易与系统内库发生冲突,可选择update numpy package in Conda或者设置为系统库3(但只是针对macOS用户,其他用户则需自行找出冲突包并选择其中之一)。
四、参考资料
文章出处登录后可见!