Python Keras或Theano中的并行索引
二维问题 对于每个数据点,我都有一个索引矩阵,我想用它从2D查找矩阵中收集向量 对于单个数据点,Theano和Keras允许轻松索引。 例如: 更正式地说,我正在寻找这样一种手术:Python Keras或Theano中的并行索引,python,theano,keras,Python,Theano,Keras,二维问题 对于每个数据点,我都有一个索引矩阵,我想用它从2D查找矩阵中收集向量 对于单个数据点,Theano和Keras允许轻松索引。 例如: 更正式地说,我正在寻找这样一种手术: result[i,j,k,:]=查找[i,索引[i,j,k],:] 或 result[i,j,k,l]=查找[i,索引[i,j,k],l] 我使用扫描实现了一个Theano解决方案。其实很简单: import theano 将无张量导入为T def并行_聚集(参考、索引): 结果,u=theano.scan(fn=
result[i,j,k,:]=查找[i,索引[i,j,k],:]
或
result[i,j,k,l]=查找[i,索引[i,j,k],l]
我使用扫描实现了一个Theano解决方案。其实很简单:
import theano
将无张量导入为T
def并行_聚集(参考、索引):
结果,u=theano.scan(fn=lambda引用,索引:reference[index],outputs_info=None,sequences=[references,index])
返回结果
鉴于Keras.rnn
是Keras的替代方案,将其重写到Keras后端似乎很麻烦。它对张量列表进行迭代,并且有一些奇怪的要求
我还想知道这是否是最快的选择,也许一些巧妙的重塑也能解决这个问题
import keras.backend as K
result = K.gather(reference, indices)
result = K.gather(reference, indices)
#let:
indices.shape = (100, 5)
reference.shape = (101, 68)
#where:
max(indices) < reference.shape[0]
#then:
result.shape = (100, 5, 68)
#let:
indices.shape = (batch_n, 100, 5)
reference.shape = (batch_n, 101, 68)
#desired result
result.shape = (batch_n, 100, 5, 68)