JonathanRaiman / theano_lstm

:microscope: Nano size Theano LSTM module
Other
304 stars 111 forks source link

Problem running the example code in 32-bit OS #18

Open ewan1983 opened 9 years ago

ewan1983 commented 9 years ago

First and foremost, THANK YOU for this AWESOME LSTM lib!! I am new to all of these, RNN, Theano, and even Python, so please forgive my ignorant question:

I download the Tutorial.ipynb, and run it line by line, however it stuck at:

# construct model & theano functions:
model = Model(
    input_size=10,
    hidden_size=10,
    vocab_size=len(vocab),
    stack_size=1, # make this bigger, but makes compilation slow
    celltype=RNN # use RNN or LSTM
)
model.stop_on(vocab.word2index["."])

where the error message is:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-10-13e620ce56bd> in <module>()
      5     vocab_size=len(vocab),
      6     stack_size=1, # make this bigger, but makes compilation slow
----> 7     celltype=RNN # use RNN or LSTM
      8 )
      9 model.stop_on(vocab.word2index["."])

<ipython-input-8-398b63091e52> in __init__(self, hidden_size, input_size, vocab_size, stack_size, celltype)
     62         self.srng = T.shared_randomstreams.RandomStreams(np.random.randint(0, 1024))
     63         # create symbolic variables for prediction:
---> 64         self.predictions = self.create_prediction()
     65         # create symbolic variable for greedy search:
     66         self.greedy_predictions = self.create_prediction(greedy=True)

<ipython-input-8-398b63091e52> in create_prediction(self, greedy)
    107                                 outputs_info=outputs_info)
    108         else:
--> 109             outputs_info = [initial_state_with_taps(layer, num_examples) for layer in self.model.layers[1:]]
    110             result, _ = theano.scan(fn=step,
    111                                 sequences=[inputs.T],

<ipython-input-8-398b63091e52> in initial_state_with_taps(layer, dimensions)
     34 def initial_state_with_taps(layer, dimensions = None):
     35     """Optionally wrap tensor variable into a dict with taps=[-1]"""
---> 36     state = initial_state(layer, dimensions)
     37     if state is not None:
     38         return dict(initial=state, taps=[-1])

<ipython-input-8-398b63091e52> in initial_state(layer, dimensions)
     30         return layer.initial_hidden_state if has_hidden(layer) else None
     31     else:
---> 32         return matrixify(layer.initial_hidden_state, dimensions) if has_hidden(layer) else None
     33 
     34 def initial_state_with_taps(layer, dimensions = None):

<ipython-input-8-398b63091e52> in matrixify(vector, n)
     18 
     19 def matrixify(vector, n):
---> 20     return T.repeat(T.shape_padleft(vector), n, axis=0)
     21 
     22 def initial_state(layer, dimensions = None):

C:\Anaconda\lib\site-packages\theano\tensor\extra_ops.pyc in repeat(x, repeats, axis)
    358     .. versionadded:: 0.6
    359     """
--> 360     return RepeatOp(axis=axis)(x, repeats)
    361 
    362 

C:\Anaconda\lib\site-packages\theano\gof\op.pyc in __call__(self, *inputs, **kwargs)
    397         """
    398         return_list = kwargs.pop('return_list', False)
--> 399         node = self.make_node(*inputs, **kwargs)
    400         if self.add_stack_trace_on_call:
    401             self.add_tag_trace(node)

C:\Anaconda\lib\site-packages\theano\tensor\extra_ops.pyc in make_node(self, x, repeats)
    257                     ("dtypes %s are not supported by numpy.repeat "
    258                      "for the 'repeats' parameter, "
--> 259                      % numpy_unsupported_dtypes), repeats.dtype)
    260 
    261         if self.axis is None:

TypeError: not all arguments converted during string formatting

EDIT 1: In the beginning, I thought maybe my Theano 0.6.0 is a bit old, so I update it to 0.7.0, but the error remains.

EDIT 2: I fixed the syntax typo and got the real error message:

TypeError: ("dtypes ('uint32', 'int64', 'uint64') are not supported by numpy.repeat for the 'repeats' parameter, ", 'int64')

And then I notice:

        ptr_bitwidth = theano.gof.local_bitwidth()
        if ptr_bitwidth == 64:
            numpy_unsupported_dtypes = ('uint64',)
        if ptr_bitwidth == 32:
            numpy_unsupported_dtypes = ('uint32', 'int64', 'uint64') 

It is because I use 32 bit OS, the somehow default int64 type is not supported, So you guys with 64 bit OS shouldn't have experienced this problem.

EDIT 3: So I tried to force cast the type to get over this error:

num_examples = T.cast(num_examples, 'int32')

Then I just got blown over by a huge load of error and warnings

WARNING (theano.gof.compilelock): Overriding existing lock by dead process '4952' (I am process '4684')
WARNING:theano.gof.compilelock:Overriding existing lock by dead process '4952' (I am process '4684')
C:\Anaconda\lib\site-packages\theano\scan_module\scan_perform_ext.py:133: RuntimeWarning: numpy.ndarray size changed, may indicate binary incompatibility
  from scan_perform.scan_perform import *
ERROR (theano.gof.opt): Optimization failure due to: local_argmax_pushdown
ERROR:theano.gof.opt:Optimization failure due to: local_argmax_pushdown
ERROR (theano.gof.opt): TRACEBACK:
ERROR:theano.gof.opt:TRACEBACK:
ERROR (theano.gof.opt): Traceback (most recent call last):
  File "C:\Anaconda\lib\site-packages\theano\gof\opt.py", line 1493, in process_node
    replacements = lopt.transform(node)
  File "C:\Anaconda\lib\site-packages\theano\tensor\nnet\nnet.py", line 1448, in local_argmax_pushdown
    return tensor._max_and_argmax(pre_x, axis)
  File "C:\Anaconda\lib\site-packages\theano\gof\op.py", line 507, in __call__
    node = self.make_node(*inputs, **kwargs)
  File "C:\Anaconda\lib\site-packages\theano\tensor\basic.py", line 1252, in make_node
    raise TypeError("MaxAndArgmax needs a constant axis")
TypeError: MaxAndArgmax needs a constant axis

ERROR:theano.gof.opt:Traceback (most recent call last):
  File "C:\Anaconda\lib\site-packages\theano\gof\opt.py", line 1493, in process_node
    replacements = lopt.transform(node)
  File "C:\Anaconda\lib\site-packages\theano\tensor\nnet\nnet.py", line 1448, in local_argmax_pushdown
    return tensor._max_and_argmax(pre_x, axis)
  File "C:\Anaconda\lib\site-packages\theano\gof\op.py", line 507, in __call__
    node = self.make_node(*inputs, **kwargs)
  File "C:\Anaconda\lib\site-packages\theano\tensor\basic.py", line 1252, in make_node
    raise TypeError("MaxAndArgmax needs a constant axis")
TypeError: MaxAndArgmax needs a constant axis

ERROR (theano.gof.opt): Optimization failure due to: local_argmax_pushdown
ERROR:theano.gof.opt:Optimization failure due to: local_argmax_pushdown
ERROR (theano.gof.opt): TRACEBACK:
ERROR:theano.gof.opt:TRACEBACK:
ERROR (theano.gof.opt): Traceback (most recent call last):
  File "C:\Anaconda\lib\site-packages\theano\gof\opt.py", line 1493, in process_node
    replacements = lopt.transform(node)
  File "C:\Anaconda\lib\site-packages\theano\tensor\nnet\nnet.py", line 1454, in local_argmax_pushdown
    ('x', 0))(pre_bias), axis)
  File "C:\Anaconda\lib\site-packages\theano\gof\op.py", line 507, in __call__
    node = self.make_node(*inputs, **kwargs)
  File "C:\Anaconda\lib\site-packages\theano\tensor\basic.py", line 1252, in make_node
    raise TypeError("MaxAndArgmax needs a constant axis")
TypeError: MaxAndArgmax needs a constant axis

ERROR:theano.gof.opt:Traceback (most recent call last):
  File "C:\Anaconda\lib\site-packages\theano\gof\opt.py", line 1493, in process_node
    replacements = lopt.transform(node)
  File "C:\Anaconda\lib\site-packages\theano\tensor\nnet\nnet.py", line 1454, in local_argmax_pushdown
    ('x', 0))(pre_bias), axis)
  File "C:\Anaconda\lib\site-packages\theano\gof\op.py", line 507, in __call__
    node = self.make_node(*inputs, **kwargs)
  File "C:\Anaconda\lib\site-packages\theano\tensor\basic.py", line 1252, in make_node
    raise TypeError("MaxAndArgmax needs a constant axis")
TypeError: MaxAndArgmax needs a constant axis

ERROR (theano.gof.opt): Optimization failure due to: local_argmax_pushdown
ERROR:theano.gof.opt:Optimization failure due to: local_argmax_pushdown
ERROR (theano.gof.opt): TRACEBACK:
ERROR:theano.gof.opt:TRACEBACK:
ERROR (theano.gof.opt): Traceback (most recent call last):
  File "C:\Anaconda\lib\site-packages\theano\gof\opt.py", line 1493, in process_node
    replacements = lopt.transform(node)
  File "C:\Anaconda\lib\site-packages\theano\tensor\nnet\nnet.py", line 1454, in local_argmax_pushdown
    ('x', 0))(pre_bias), axis)
  File "C:\Anaconda\lib\site-packages\theano\gof\op.py", line 507, in __call__
    node = self.make_node(*inputs, **kwargs)
  File "C:\Anaconda\lib\site-packages\theano\tensor\basic.py", line 1252, in make_node
    raise TypeError("MaxAndArgmax needs a constant axis")
TypeError: MaxAndArgmax needs a constant axis

ERROR:theano.gof.opt:Traceback (most recent call last):
  File "C:\Anaconda\lib\site-packages\theano\gof\opt.py", line 1493, in process_node
    replacements = lopt.transform(node)
  File "C:\Anaconda\lib\site-packages\theano\tensor\nnet\nnet.py", line 1454, in local_argmax_pushdown
    ('x', 0))(pre_bias), axis)
  File "C:\Anaconda\lib\site-packages\theano\gof\op.py", line 507, in __call__
    node = self.make_node(*inputs, **kwargs)
  File "C:\Anaconda\lib\site-packages\theano\tensor\basic.py", line 1252, in make_node
    raise TypeError("MaxAndArgmax needs a constant axis")
TypeError: MaxAndArgmax needs a constant axis

EDIT4 Just found out the new errors are similar to issue12, which mentioned the error have something to do with scipy. So update it scipy: 0.15.1-np19py27_0 --> 0.16.0-np19py27_0 Run the example code again, and the error remains. Still stuck. Frustrating.

These bugs are really newbie unfriendly, Last time I use pandas and got stuck with some pytable bugs, spend way too much time trying to develop walk-around. I don't want to spend time fighting the tools, I just want to get them up and running FAST so I can do my actual work.