2016-11-30 30 views
0

這是我在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) 

我所試圖做的是與toReplace一行一行替換beReplaced。我這樣做的方法是通過的上部concatenatev和的參與者。

v是行toReplace

以下是錯誤報告

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. 

什麼問題???????????

回答

0

解決方案是連接v.dimshuffle('x',0)並解決了暗淡的問題。

0

toReplace分成non_sequences,否則每個時間步將只會佔用一部分。 Theano會在嘗試將矢量與矩陣連接時報告錯誤。

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

從切片取代是我的目標,即不能改變。 如果把'toReplace'放入'non_sequence'中,'output'的形狀將會改變,那是無效的。 解決方案是連接'v.dimshuffle('x',0)'並解決這個暗淡的問題。 一路感謝。 –