You need to sign in or sign up before continuing.
想循环处理model的输入tensor,如何实现?
Created by: qianledan
在build program时,predict = model.net(input, class_dim=class_dim)。 然后,我想修改model.net模型,想在net模型里对input进行迭代,处理每个input的通道值(想对大小进行排序)。因为input是tensor,shape是[-1,C,H,W],无法对第一维进行循环。而且input是tensor,是空的,无法进行值得处理。请问有什么方法吗???
比如:se-resnet中的SE模块计算,我想对excitation 后的每图片的各通道值(shape:[-1,C])进行大小排序,如何实现?
def squeeze_excitation(self,
input,
num_channels,
reduction_ratio,
name=None):
pool = fluid.layers.pool2d(
input=input, pool_size=0, pool_type='avg', global_pooling=True)
stdv = 1.0 / math.sqrt(pool.shape[1] * 1.0)
squeeze = fluid.layers.fc(
input=pool,
size=num_channels // reduction_ratio,
act='relu',
param_attr=fluid.param_attr.ParamAttr(
initializer=fluid.initializer.Uniform(-stdv, stdv),
name=name + '_sqz_weights'),
bias_attr=ParamAttr(name=name + '_sqz_offset'))
stdv = 1.0 / math.sqrt(squeeze.shape[1] * 1.0)
excitation = fluid.layers.fc(
input=squeeze,
size=num_channels,
act='sigmoid',
param_attr=fluid.param_attr.ParamAttr(
initializer=fluid.initializer.Uniform(-stdv, stdv),
name=name + '_exc_weights'),
bias_attr=ParamAttr(name=name + '_exc_offset'))