theano ~ 使用索引矩阵和嵌入矩阵来生成 3D 张量?
theano ~ use an index matrix and embeddings matrix to produce a 3D tensor?
假设我有一个索引矩阵:
index_matrix = [[0,1],
[2,1]]
还有一个嵌入矩阵:
embeddings_matrix = [[1,2,3],
[2,3,4],
[4,5,6],
.
.
. ]
index_matrix
中的每个元素对应于 embeddings_matrix
中的特定行。例如,index_matrix
中的0
对应embeddings_matrix
中的[1,2,3]
。
仅使用 theano 语法,如何构建 3D 张量,其中 index_matrix
中的每个索引都替换为 embeddings_matrix
中的行或向量?
编辑:我能够解决类似的问题:使用上面的 index_vector = [0,1,2,1]
和 embeddings_matrix
生成二维张量。为此,我需要以下 theano 语法:
Matrix = embeddings_matrix[index_vector].reshape((index_vector.shape[0], -1))
但是,我有点卡在 3D 的情况下。
您可以使用索引矩阵简单地索引到嵌入矩阵中:
import numpy
import theano
import theano.tensor as tt
embeddings_matrix = theano.shared(numpy.array([[1, 2, 3], [2, 3, 4], [4, 5, 6]], dtype=theano.config.floatX))
index_matrix = tt.imatrix()
y = embeddings_matrix[index_matrix]
f = theano.function([index_matrix], y)
output = f(numpy.array([[0, 1], [2, 1]], dtype=numpy.int32))
print output.shape, '\n', output
这会打印
(2L, 2L, 3L)
[[[ 1. 2. 3.]
[ 2. 3. 4.]]
[[ 4. 5. 6.]
[ 2. 3. 4.]]]
输出是 3D 的,索引矩阵中的每个元素根据需要替换为相应的嵌入向量。
假设我有一个索引矩阵:
index_matrix = [[0,1],
[2,1]]
还有一个嵌入矩阵:
embeddings_matrix = [[1,2,3],
[2,3,4],
[4,5,6],
.
.
. ]
index_matrix
中的每个元素对应于 embeddings_matrix
中的特定行。例如,index_matrix
中的0
对应embeddings_matrix
中的[1,2,3]
。
仅使用 theano 语法,如何构建 3D 张量,其中 index_matrix
中的每个索引都替换为 embeddings_matrix
中的行或向量?
编辑:我能够解决类似的问题:使用上面的 index_vector = [0,1,2,1]
和 embeddings_matrix
生成二维张量。为此,我需要以下 theano 语法:
Matrix = embeddings_matrix[index_vector].reshape((index_vector.shape[0], -1))
但是,我有点卡在 3D 的情况下。
您可以使用索引矩阵简单地索引到嵌入矩阵中:
import numpy
import theano
import theano.tensor as tt
embeddings_matrix = theano.shared(numpy.array([[1, 2, 3], [2, 3, 4], [4, 5, 6]], dtype=theano.config.floatX))
index_matrix = tt.imatrix()
y = embeddings_matrix[index_matrix]
f = theano.function([index_matrix], y)
output = f(numpy.array([[0, 1], [2, 1]], dtype=numpy.int32))
print output.shape, '\n', output
这会打印
(2L, 2L, 3L)
[[[ 1. 2. 3.]
[ 2. 3. 4.]]
[[ 4. 5. 6.]
[ 2. 3. 4.]]]
输出是 3D 的,索引矩阵中的每个元素根据需要替换为相应的嵌入向量。