在theano

时间:2016-08-18 13:54:23

标签: python windows anaconda theano intel-mkl

我正在尝试运行此代码:

x_set = np.random.rand(100,100,100)
x = T.dtensor3('x')
inp = x.reshape((100, 1, 100, 100))
W_stdDev = np.sqrt(2. / (3 * 3 * 2))

W = theano.shared(
    np.asarray(
        np.random.normal(loc=.0, scale=W_stdDev, size=(3,1,3,3)),
        dtype=theano.config.floatX
    ),
    borrow=True
)

conv_out = conv2d(
    input=inp,
    filters=W,
    filter_shape=(3,1,3,3),
)

train_model = theano.function(
    inputs=[x],
    outputs=conv_out,
)

print(train_model(x_set))

但收到错误:

  

AssertionError:AbstractConv2d Theano优化失败:没有   可用的实现支持所请求的选项。你是否   排除" conv_dnn"和" conv_gemm"来自优化器?如果在GPU上,   是cuDNN可用,GPU支持吗?如果在CPU上,你有吗?   一个BLAS库安装Theano可以链接?

我正在使用Windows 10 64位和Anaconda 4.1.1安装:

  

python 3.4.5;   numpy 1.11.1;   theano 0.9.0.dev2;   mkl 11.3.3;   mkl-service 1.1.2;

我试图找出如何将theano链接到mkl但是卡住了。因为numpy.show_config()表示:

blas_opt_info:
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['C:\\Minonda\\envs\\_build\\Library\\include']
    libraries = ['mkl_core_dll', 'mkl_intel_lp64_dll', 'mkl_intel_thread_dll']
    library_dirs = ['C:\\Minonda\\envs\\_build\\Library\\lib']
openblas_lapack_info:
  NOT AVAILABLE
lapack_mkl_info:
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['C:\\Minonda\\envs\\_build\\Library\\include']
    libraries = ['mkl_lapack95_lp64', 'mkl_core_dll', 'mkl_intel_lp64_dll', 'mkl_intel_thread_dll']
    library_dirs = ['C:\\Minonda\\envs\\_build\\Library\\lib']
mkl_info:
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['C:\\Minonda\\envs\\_build\\Library\\include']
    libraries = ['mkl_core_dll', 'mkl_intel_lp64_dll', 'mkl_intel_thread_dll']
    library_dirs = ['C:\\Minonda\\envs\\_build\\Library\\lib']
lapack_opt_info:
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['C:\\Minonda\\envs\\_build\\Library\\include']
    libraries = ['mkl_lapack95_lp64', 'mkl_core_dll', 'mkl_intel_lp64_dll', 'mkl_intel_thread_dll']
    library_dirs = ['C:\\Minonda\\envs\\_build\\Library\\lib']
blas_mkl_info:
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['C:\\Minonda\\envs\\_build\\Library\\include']
    libraries = ['mkl_core_dll', 'mkl_intel_lp64_dll', 'mkl_intel_thread_dll']
    library_dirs = ['C:\\Minonda\\envs\\_build\\Library\\lib']

但路径' C:\ Minonda \ envs \ _build \ Library \ lib'在我的系统上不存在。

我还尝试在C:\ Anaconda \ pkgs中找到mkl安装,但是只有一个mkl-11.3.3-1.tar.bz2文件。

我还单独安装了英特尔MKL并尝试添加

[blas]
ldflags = -LC:\Program Files(x86)\IntelSWTools\compilers_and_libraries_2016.3.207\windows\mkl\include

到我的theanorc.txt,导致错误:

  

ValueError :('编译节点时发生以下错误',CorrMM {有效,(1,1),(1,1)}(InplaceDimShuffle {0,x,1,2}。 0,Elemwise {Cast {float64}}。0),' \ n','无效令牌"文件"在ldflags_str:" -LC:\ Program Files (86)\ IntelSWTools \ compilers_and_libraries_2016.3.207 \ Windows \ MKL \包括"&#39)

我如何正确地将anaconda mkl或intel mkl链接到我的theano?

1 个答案:

答案 0 :(得分:0)

是的,theano无法处理文件路径中的空格...程序文件(x86)

我试图在各处找到关于如何逃避太空角色的答案,我无法做到。最后,我找到了符号链接,它创建了某种指向另一个目录的目录。

  • 以管理员身份运行cmd
  • 键入命令mklink /D "C:\LinkToProgramFilesX86" "C:\Program Files (x86)"(或您想要链接的任何其他名称,但请确保您不会添加任何空格,大声笑)

这将创建链接,您将能够在Windows资源管理器中看到这个新目录,就好像它是一个快捷方式,但作为一个实际的文件夹。

然后将其添加到[blas]配置中:

ldflags = -L"C:\LinkToProgramFilesX86\IntelSWTools\compilers_and_libraries_2016.3.207\windows\mkl\include"

不确定它是否是正确的目录,但它确实解决了空间问题。就我而言,我用过:

-L"C:/LinkToProgramFilesX86/IntelSWTools/compilers_and_libraries_2017/windows/mkl/lib/intel64_win" -lmkl_lapack95_lp64 -lmkl_blas95_lp64 -lmkl_rt -lm -lm

......用双引号。

现在,因为生活并不容易,所以出现了一个新问题:我们没有在我们用于blas的库的library_dir中找到动态库。

我解决了转到numpy安装目录,并在文件__config__.py中更改相同的内容。 (将所有Program Files (x86)替换为新链接LinkToProgramFilesX86

在此之后消息停止显示:)