2016-08-18 4 views
1

Я пытаюсь запустить этот код:Получение AssertionError при оптимизации свертку в Теано

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 optimization failed: there is no implementation available supporting the requested options. Did you exclude both "conv_dnn" and "conv_gemm" from the optimizer? If on GPU, is cuDNN available and does the GPU support it? If on CPU, do you have a BLAS library installed Theano can link against?

Я работаю на 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' не существует в моей системе.

Я попытался также найти установку mkl внутри C: \ Anaconda \ pkgs, но есть только файл mkl-11.3.3-1.tar.bz2.

Также я установил Intel MKL отдельно и попытался добавить

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

к моему theanorc.txt, что приводит к ошибке:

ValueError: ('The following error happened while compiling the node', CorrMM{valid, (1, 1), (1, 1)}(InplaceDimShuffle{0,x,1,2}.0, Elemwise{Cast{float64}}.0), '\n', 'invalid token "Files" in ldflags_str: "-LC:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2016.3.207\windows\mkl\include"')

Как я смог связать анаконды МКЛ или intel mkl правильно для моего anano?

+0

я действительно подозреваю, эти библиотеки не могут обрабатывать пробелы в пути к файлам ... так, мы, возможно, придется переустановить mkl в другом пути, который я не знаю, как это сделать, и я действительно не хочу так сильно мешать компьютеру: '( –

ответ

0

Да, Theano не может иметь дело с пробелами в пути к файлу ... Программа Files (x86)

Я пытался найти ответы везде о том, как избежать пробелов, и я не смог сделать это , В конце я узнал символическую ссылку , которая создает какой-то каталог, указывающий на другой каталог.

  • Запустить cmd с правами администратора.
  • Введите команду mklink /D "C:\LinkToProgramFilesX86" "C:\Program Files (x86)" (или любое другое имя, которое вы хотите ссылку, но убедитесь, что вы не добавит никаких пробелов в том, что, лол)

Это позволит создать ссылку, и вы будете в состоянии см. этот новый каталог в проводнике Windows, как если бы он был ярлыком, но работал как фактическая папка.

Затем добавьте в ваш [Блас] конфигурации:

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.

Я решил, что перейду в каталог установки numpy и изменив то же самое в файле __config__.py. (Заменены все Program Files (x86) с новой ссылкой LinkToProgramFilesX86)

Сообщение перестал появляться после этого :)

 Смежные вопросы

  • Нет связанных вопросов^_^