0

This is my code in theano

max_max=200
beReplaced=T.matrix()
toReplace=T.matrix()
timeArray=T.arange(max_max)


def f(v,k,w):
    return T.concatenate([w[:k],v,w[k+1:]],axis=0)

result,_=theano.scan(f,
                     sequences=[toReplace,timeArray],
                     outputs_info=beReplaced)

What I am trying to do is replace beReplaced with toReplace line by line. The way I do it is by concatenate the upper part of w, v and lower parter of w.

vis lines of toReplace.

Here is the error report

Traceback (most recent call last):
  File "/Users/qiansteven/Desktop/NLP/RNN/my.py", line 20, in <module>
    outputs_info=np.zeros((5,5),dtype=np.float64))
  File "/usr/local/lib/python2.7/site-packages/theano/scan_module/scan.py", line 745, in scan
    condition, outputs, updates = scan_utils.get_updates_and_outputs(fn(*args))
  File "/Users/qiansteven/Desktop/NLP/RNN/my.py", line 16, in f
    return T.concatenate([a,b,c],axis=0)
  File "/usr/local/lib/python2.7/site-packages/theano/tensor/basic.py", line 4225, in concatenate
    return join(axis, *tensor_list)
  File "/usr/local/lib/python2.7/site-packages/theano/gof/op.py", line 611, in __call__
    node = self.make_node(*inputs, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/theano/tensor/basic.py", line 3750, in make_node
    axis, tensors, as_tensor_variable_args, output_maker)
  File "/usr/local/lib/python2.7/site-packages/theano/tensor/basic.py", line 3816, in _make_node_internal
    raise TypeError("Join() can only join tensors with the same "
TypeError: Join() can only join tensors with the same number of dimensions.

What's wrong???????????

Nick Qian
  • 129
  • 2
  • 9

2 Answers2

0

Put toReplace into non_sequences, otherwise each timestep will only take a slice of it. Theano will report error when it tries to concatenate a vector with matrix.

def f(k,w,v): #NOTE the argument order change
    return T.concatenate([w[:k],v,w[k+1:]],axis=0)

result,_=theano.scan(f,
                     sequences=timeArray,
                     outputs_info=beReplaced,
                     non_sequences=toReplace)
Kh40tiK
  • 2,276
  • 19
  • 29
  • To take slices from to replace is my objective, that can not change. And if put `toReplace` into `non_sequence`, the shape of `output` will change, thats invalid. The solution is to concatenate `v.dimshuffle('x',0)` and that solves the dim problem. Thanks all the way. – Nick Qian Dec 03 '16 at 03:28
0

The solution is to concatenate v.dimshuffle('x',0) and that solves the dim problem.

Nick Qian
  • 129
  • 2
  • 9