在已建立的 theano 环境中使用 keras 时出现奇怪的错误

strange error when using keras on established theano enviorment

我已经在 windows 上基于 official tutorial 安装了 theano,在我 运行 之后,测试代码:

from theano import function, config, shared, sandbox
import theano.tensor as T
import numpy
import time

vlen = 10 * 30 * 768  # 10 x #cores x # threads per core
iters = 1000

rng = numpy.random.RandomState(22)
x = shared(numpy.asarray(rng.rand(vlen), config.floatX))
f = function([], T.exp(x))
print(f.maker.fgraph.toposort())
t0 = time.time()
for i in range(iters):
    r = f()
t1 = time.time()
print("Looping %d times took %f seconds" % (iters, t1 - t0))
print("Result is %s" % (r,))
if numpy.any([isinstance(x.op, T.Elemwise) for x in      f.maker.fgraph.toposort()]):
    print('Used the cpu')
else:
    print('Used the gpu')

结果很好:

runfile('C:/SciSoft/my_code/untitled0.py', wdir='C:/SciSoft/my_code')
[GpuElemwise{exp,no_inplace}(<CudaNdarrayType(float32, vector)>), HostFromGpu(GpuElemwise{exp,no_inplace}.0)]
Looping 1000 times took 0.772000 seconds
Result is [ 1.23178029  1.61879349  1.52278066 ...,  2.20771813  2.29967761
  1.62323296]
Used the gpu

但是当我 运行 keras 包中用于文本生成的 LSTM 示例时:

from __future__ import print_function
from keras.models import Sequential
from keras.layers.core import Dense, Activation, Dropout
from keras.layers.recurrent import LSTM
#from keras.utils.data_utils import get_file
import numpy as np
import random
import sys

#path = get_file('nietzsche.txt', origin="https://s3.amazonaws.com/text-datasets/nietzsche.txt")

text = open("C:\SciSoft\my_code\train.txt").read().lower()
print('corpus length:', len(text))

chars = set(text)
print('total chars:', len(chars))
char_indices = dict((c, i) for i, c in enumerate(chars))
indices_char = dict((i, c) for i, c in enumerate(chars))

# cut the text in semi-redundant sequences of maxlen characters
maxlen = 40
step = 3
sentences = []
next_chars = []
for i in range(0, len(text) - maxlen, step):
    sentences.append(text[i: i + maxlen])
    next_chars.append(text[i + maxlen])
print('nb sequences:', len(sentences))

print('Vectorization...')
X = np.zeros((len(sentences), maxlen, len(chars)), dtype=np.bool)
y = np.zeros((len(sentences), len(chars)), dtype=np.bool)
for i, sentence in enumerate(sentences):
    for t, char in enumerate(sentence):
        X[i, t, char_indices[char]] = 1
    y[i, char_indices[next_chars[i]]] = 1


# build the model: 2 stacked LSTM
print('Build model...')
model = Sequential()
model.add(LSTM(512, return_sequences=True, input_shape=(maxlen, len(chars))))
model.add(Dropout(0.2))
model.add(LSTM(512, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(len(chars)))
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy', optimizer='rmsprop')


def sample(a, temperature=1.0):
    # helper function to sample an index from a probability array
    a = np.log(a) / temperature
    a = np.exp(a) / np.sum(np.exp(a))
    return np.argmax(np.random.multinomial(1, a, 1))

# train the model, output generated text after each iteration
for iteration in range(1, 60):
    print()
    print('-' * 50)
    print('Iteration', iteration)
    model.fit(X, y, batch_size=128, nb_epoch=1)

    start_index = random.randint(0, len(text) - maxlen - 1)

    for diversity in [0.2, 0.5, 1.0, 1.2]:
        print()
        print('----- diversity:', diversity)

        generated = ''
        sentence = text[start_index: start_index + maxlen]
        generated += sentence
        print('----- Generating with seed: "' + sentence + '"')
        sys.stdout.write(generated)

        for i in range(400):
            x = np.zeros((1, maxlen, len(chars)))
            for t, char in enumerate(sentence):
                x[0, t, char_indices[char]] = 1.

            preds = model.predict(x, verbose=0)[0]
            next_index = sample(preds, diversity)
            next_char = indices_char[next_index]

            generated += next_char
            sentence = sentence[1:] + next_char

            sys.stdout.write(next_char)
            sys.stdout.flush()
        print()

它returns错误信息:

Problem occurred during compilation with the command line below:
C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\..\tools\mingw32\bin\g++.exe -shared -g -O3 -fno-math-errno -Wno-unused-label -Wno-unused-variable -Wno-write-strings -IC:\SciSoft\TDM-GCC-64\x86_64-w64-mingw32 -march=sandybridge -mmmx -mno-3dnow -msse -msse2 -msse3 -mssse3 -mno-sse4a -mcx16 -msahf -mno-movbe -maes -mno-sha -mpclmul -mpopcnt -mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-bmi2 -mno-tbm -mavx -mno-avx2 -msse4.2 -msse4.1 -mno-lzcnt -mno-rtm -mno-hle -mno-rdrnd -mno-f16c -mno-fsgsbase -mno-rdseed -mno-prfchw -mno-adx -mfxsr -mxsave -mxsaveopt -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mno-prefetchwt1 --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=6144 -mtune=sandybridge -DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION -m64 -DMS_WIN64 -IC:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\numpy\core\include -IC:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\include -IC:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\theano\gof -o C:\Users\Administrator\AppData\Local\Theano\compiledir_Windows-7-6.1.7601-SP1-Intel64_Family_6_Model_42_Stepping_7_GenuineIntel-2.7.9-64\tmpuhl6sz\cdb0b986639740d2acf156f042fe37d2.pyd C:\Users\Administrator\AppData\Local\Theano\compiledir_Windows-7-6.1.7601-SP1-Intel64_Family_6_Model_42_Stepping_7_GenuineIntel-2.7.9-64\tmpuhl6sz\mod.cpp -LC:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\libs -LC:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64 -lpython27
Traceback (most recent call last):

  File "<ipython-input-5-094398225b1f>", line 1, in <module>
    runfile('C:/SciSoft/WinPython-64bit-2.7.9.4/settings/.spyder2/temp.py', wdir='C:/SciSoft/WinPython-64bit-2.7.9.4/settings/.spyder2')

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 682, in runfile
    execfile(filename, namespace)

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 71, in execfile
    exec(compile(scripttext, filename, 'exec'), glob, loc)

  File "C:/SciSoft/WinPython-64bit-2.7.9.4/settings/.spyder2/temp.py", line 52, in <module>
    model.add(Dropout(0.2))

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\keras\models.py", line 142, in add
    output_tensor = layer(self.outputs[0])

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\keras\engine\topology.py", line 485, in __call__
    self.add_inbound_node(inbound_layers, node_indices, tensor_indices)

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\keras\engine\topology.py", line 543, in add_inbound_node
    Node.create_node(self, inbound_layers, node_indices, tensor_indices)

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\keras\engine\topology.py", line 148, in create_node
    output_tensors = to_list(outbound_layer.call(input_tensors[0], mask=input_masks[0]))

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\keras\layers\core.py", line 87, in call
    x = K.in_train_phase(K.dropout(x, level=self.p), x)

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\keras\backend\theano_backend.py", line 773, in dropout
    x *= rng.binomial(x.shape, p=retain_prob, dtype=x.dtype)

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\theano\sandbox\rng_mrg.py", line 1359, in binomial
    x = self.uniform(size=size, dtype=dtype, nstreams=nstreams)

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\theano\sandbox\rng_mrg.py", line 1321, in uniform
    rstates = self.get_substream_rstates(nstreams, dtype)

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\theano\sandbox\rng_mrg.py", line 1223, in get_substream_rstates
    multMatVect(rval[0], A1p72, M1, A2p72, M2)

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\theano\sandbox\rng_mrg.py", line 64, in multMatVect
    [A_sym, s_sym, m_sym, A2_sym, s2_sym, m2_sym], o, profile=False)

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\theano\compile\function.py", line 320, in function
    output_keys=output_keys)

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\theano\compile\pfunc.py", line 479, in pfunc
    output_keys=output_keys)

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\theano\compile\function_module.py", line 1777, in orig_function
    defaults)

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\theano\compile\function_module.py", line 1641, in create
    input_storage=input_storage_lists, storage_map=storage_map)

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\theano\gof\link.py", line 690, in make_thunk
    storage_map=storage_map)[:3]

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\theano\gof\vm.py", line 1003, in make_all
    no_recycling))

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\theano\gof\op.py", line 970, in make_thunk
    no_recycling)

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\theano\gof\op.py", line 879, in make_c_thunk
    output_storage=node_output_storage)

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\theano\gof\cc.py", line 1200, in make_thunk
    keep_lock=keep_lock)

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\theano\gof\cc.py", line 1143, in __compile__
    keep_lock=keep_lock)

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\theano\gof\cc.py", line 1595, in cthunk_factory
    key=key, lnk=self, keep_lock=keep_lock)

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\theano\gof\cmodule.py", line 1142, in module_from_key
    module = lnk.compile_cmodule(location)

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\theano\gof\cc.py", line 1506, in compile_cmodule
    preargs=preargs)

  File "C:\SciSoft\WinPython-64bit-2.7.9.4\python-2.7.9.amd64\lib\site-packages\theano\gof\cmodule.py", line 2204, in compile_str
    (status, compile_stderr.replace('\n', '. ')))

Exception: ('The following error happened while compiling the node', DotModulo(A, s, m, A2, s2, m2), '\n', "Compilation failed (return status=1): C:/SciSoft/WinPython-64bit-2.7.9.4/tools/mingw32/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/libstdc++.a(basic_file.o):(.text$_ZN12_GLOBAL__N_1L6xwriteEiPKcx+0x29): undefined reference to `write'\r. C:/SciSoft/WinPython-64bit-2.7.9.4/tools/mingw32/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/libstdc++.a(basic_file.o):(.text$_ZNSt12__basic_fileIcE8sys_openEiSt13_Ios_Openmode+0x36): undefined reference to `fdopen'\r. C:/SciSoft/WinPython-64bit-2.7.9.4/tools/mingw32/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/SciSoft/WinPython-64bit-2.7.9.4/tools/mingw32/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/libstdc++.a(basic_file.o): bad reloc address 0x36 in section `.text$_ZNSt12__basic_fileIcE8sys_openEiSt13_Ios_Openmode'\r. collect2.exe: error: ld returned 1 exit status\r. ", '[DotModulo(A, s, m, A2, s2, m2)]')

我对此很困惑,不知道如何解决,希望有人能帮助我,谢谢!

听起来您需要使用与 WinPython 捆绑在一起的 g++ 版本:https://groups.google.com/forum/#!topic/theano-users/x0vNYVYH_Z0