Python 如何将具有给定值的可广播张量添加到序号中的另一个张量?

Python 如何将具有给定值的可广播张量添加到序号中的另一个张量?,python,theano,Python,Theano,我正在尝试在Theano/Lasagne中创建一个自定义层,它会改变图像矩阵以产生一些随机偏差。我希望这个偏差对于某个图像是一个常数,但是对于一批中的每一个图像是不同的 “input”是一个带形状的张量('x',3,32,32),其中“x”是可广播维度,表示图像批次计数。上面的代码将随机数的('x',3,32,32)矩阵添加到“输入”中。 但是,我希望每个图像的数字都相同(bias[I,:,:,:,:]=const) 并且只在不同的图像之间随机(偏差[i,:!=bias[j,:]) 问题是我无法

我正在尝试在Theano/Lasagne中创建一个自定义层,它会改变图像矩阵以产生一些随机偏差。我希望这个偏差对于某个图像是一个常数,但是对于一批中的每一个图像是不同的

“input”是一个带形状的张量('x',3,32,32),其中“x”是可广播维度,表示图像批次计数。上面的代码将随机数的('x',3,32,32)矩阵添加到“输入”中。 但是,我希望每个图像的数字都相同(bias[I,:,:,:,:]=const) 并且只在不同的图像之间随机(偏差[i,:!=bias[j,:]) 问题是我无法直接访问可广播维度。
关于如何做这件事有什么想法吗?

此代码未经测试,但您可以创建一个大小等于批量大小的随机数向量,然后使用
dimsuffle
添加可广播维度:

def get_output_for(self, input, **kwargs):
    bias=self._srng.uniform(input.shape)
    output=input+bias
    return theano.tensor.clip(output,0,1)   

此代码未经测试,但您可以创建大小等于批量大小的随机数向量,然后使用
dimshuffle
添加可广播维度:

def get_output_for(self, input, **kwargs):
    bias=self._srng.uniform(input.shape)
    output=input+bias
    return theano.tensor.clip(output,0,1)   

谢谢,成功了!bias=self._srng.uniform((input.shape[0],1,1,1)).dimshuffle(0,'x','x','x')谢谢,成功了!偏差=自均匀((输入形状[0],1,1,1)).dimshuffle(0,'x','x','x'))