2017-05-17 2 views
1

同じタイプの変数が複数の場所で使用されているかどうかを確認するTheanoのスキャン機能のチェックが原因でエラーが発生します。この関数は、(N, 1)行列でcol TensorTypeの(N, 1)を交換することはできません(下記のエラー参照)。TheanoをTensorType colからTensorType行列に変換する

(N, 1)テンソルタイプcolテンソルタイプをmatrix TensorTypeにキャスト/変換するにはどうすればよいですか?

TypeError: ('The following error happened while compiling the node', forall_inplace,cpu,scan_fn}(TensorConstant{20}, InplaceDimShuffle{1,0,2}.0, IncSubtensor{InplaceSet;:int64:}.0, IncSubtensor{InplaceSet;:int64:}.0, IncSubtensor{InplaceSet;:int64:}.0, TensorConstant{20}, condpred_1_W_ih, condpred_1_W_ho, embedding_1_W, InplaceDimShuffle{x,0}.0, InplaceDimShuffle{x,0}.0, AdvancedIncSubtensor{inplace=False, set_instead_of_inc=True}.0), '\n', "Inconsistency in the inner graph of scan 'scan_fn' : an input and an output are associated with the same recurrent state and should have the same type but have type 'TensorType(int32, matrix)' and 'TensorType(int32, col)' respectively.") 
+0

変数を宣言するときに、その両方を 'col'または' matrix'にしますか? –

+0

私はそれらのどちらかを 'col'または' matrix'のどちらかとして具体的に宣言していません。 'K.zeros((self.batch_size、1)、dtype = 'int32')' – pir

+0

これらのうちの1つがTheano 'step'関数内で暗黙的に変換されているようです。 – pir

答えて

1

theano.tensor.patternbroadcastを使用する必要があります。

あなたがhereが表示された場合、fmatrixの形状が(?, ?)あるとfcolのそれは(?, 1)です。 ?の意味は、次元は任意の値を取ることができるということです。だから、形状はfmatrixfcolの間の良い差別化要因ではありません。さて、放送可能なコラムを見てください。 fmatrixの最終次元はブロードキャストできませんが、fcolの最終次元はブロードキャストできません。したがって、次のコードはこれらの型間で変換する必要があります。

行列を列に変換し、列を列に変換します。

from theano import tensor as T 

x = T.fmatrix('x') 
x_to_col = T.patternbroadcast(x, (False, True)) 
x.type 
x_to_col.type 

y = T.fcol('y') 
y_to_matrix = T.patternbroadcast(y, (False, False)) 
y.type 
y_to_matrix.type 

上記のコマンドをコンソールで実行して、データ型が実際に変更されたことを確認します。したがって、fmatrix変数またはfcol変数を変更してください。

+0

私の以前の(今削除された)コメントは無視してください。できます。ありがとう! – pir

+0

はい。私はそうだと思いました。私はTheanoソースコードでエラーメッセージを発見しました:)。私はおそらくあなたが間違った方法で 'x'を渡していると思った。 –

+0

あなたは良いリファレンスを持っていますか?ブロードキャスト可能なのはテンソルの解釈が 'col'か' matrix'のどちらになるのかという背後にある直感について読むことができますか? :)私はTheanoサイトで素敵な説明を見つけることができません。 – pir

関連する問題