如何在 Theano 中进行快速最近邻上采样?

How to do fast nearest-neighbor upsampling in Theano?

目前我正在使用这段代码,但是它真的很慢:

def resizeNN(inp, scale):
    b, ch, row, col = inp.shape
    out = T.zeros((b, ch, row * scale, col * scale))
    for y range(scale):
      for x range(scale):
        out = T.inc_subtensor(out[:, :, y::scale, x::scale], inp)

    return out

有什么办法可以加快速度吗?

此代码更加矢量化。我不确定重塑的速度有多快。

def resizeNN(inp, scale):
    inp_shp = T.shape(inp)
    return T.tile(inp.dimshuffle(0,1,2,3,'x','x'),
        (scale,scale)).transpose(
            0,1,2,4,3,5).reshape(
                inp_shp[0], inp_shp[1],
                inp_shp[2]*scale, inp_shp[3]*scale)