Theano从TensorType col转换为TensorType矩阵

时间:2017-05-17 01:42:15

标签: casting theano tensor

由于在Theano的扫描功能中检查是否因为多个地方使用了相同类型的变量而导致错误。此函数不允许将{TensorType (N, 1)(N, 1)矩阵交换(请参阅下面的错误)。

如何将(N, 1) TensorType的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.")

1 个答案:

答案 0 :(得分:1)

您需要使用theano.tensor.patternbroadcast

如果您看到herefmatrix的形状为(?, ?)fcol的形状为(?, 1)?的含义是维度可以取任何值。因此,形状不是fmatrixfcol之间的良好区分。现在,请参阅可播放列。 fmatrix的最后一个维度不能被广播,而fcol的最后一个维度是不可广播的。因此,以下代码应在这些类型之间进行转换。

让我们将矩阵转换为col,然后反之亦然。

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变量。