Recibe AssertionError mientras optimizas la convolución en theano

Estoy tratando de ejecutar este código:

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)) 

pero recibe el error:

AssertionError: AbstractConv2d La optimización de Theano ha fallado: no hay ninguna implementación disponible que soporte las opciones solicitadas. ¿Excluyó tanto “conv_dnn” como “conv_gemm” del optimizador? Si está en GPU, ¿cuDNN está disponible y la GPU lo admite? Si en la CPU, ¿tiene una biblioteca BLAS instalada, Theano puede vincular?

Estoy trabajando en Windows 10 64bit y una instalación de Anaconda 4.1.1 con:

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

Intenté averiguar cómo vincular theano con mkl pero me quedé atascado. Porque el numpy.show_config () dice:

 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'] 

pero la ruta ‘C: \ Minonda \ envs \ _build \ Library \ lib’ no existe en mi sistema.

También intenté encontrar la instalación mkl dentro de C: \ Anaconda \ pkgs, pero solo hay un archivo mkl-11.3.3-1.tar.bz2.

También instalé Intel MKL por separado y traté de agregar

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

a mi theanorc.txt, que lleva al error:

ValueError: (‘El siguiente error ocurrió al comstackr el nodo’, CorrMM {válido, (1, 1), (1, 1)} (InplaceDimShuffle {0, x, 1,2} .0, Elemwise {Cast {float64} } .0), ‘\ n’, ‘token no válido “Archivos” en ldflags_str: “-LC: \ Archivos de progtwig (x86) \ IntelSWTools \ compilers_and_libraries_2016.3.207 \ windows \ mkl \ include”‘)

¿Cómo puedo vincular correctamente la anaconda mkl o la inteligencia mkl a mi theano?

Sí, theano no puede manejar espacios en la ruta del archivo … Progtwig Archivos (x86)

Intenté encontrar respuestas en todas partes sobre cómo escapar del personaje espacial y no pude hacerlo. Al final, descubrí el enlace simbólico , que crea algún tipo de directorio que apunta a otro directorio.

  • Ejecute cmd como administrador.
  • Escriba el comando mklink /D "C:\LinkToProgramFilesX86" "C:\Program Files (x86)" (o cualquier otro nombre que desee al enlace, pero asegúrese de no agregarle ningún espacio, lol)

Esto creará el enlace y podrá ver este nuevo directorio en el Explorador de Windows como si fuera un acceso directo, pero funcionando como una carpeta real.

Luego agregue esto a su configuración [blas]:

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

Sin embargo, no estoy seguro de si es el directorio correcto, pero definitivamente resuelve el problema con los espacios. En mi caso, utilicé:

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

… con las comillas dobles.

Ahora, debido a que la vida no es fácil, apareció un nuevo problema: no encontramos una biblioteca dinámica en el library_dir de la biblioteca que usamos para blas.

Resolví eso yendo al directorio de instalación numpy, y cambiando lo mismo en el archivo __config__.py . (Reemplazó todos los Program Files (x86) con el nuevo enlace LinkToProgramFilesX86 )

El mensaje dejó de mostrarse después de eso 🙂