[docs]defmodule_rf(module,input,output):"""Estimate the spatial receptive field of the module Args: module (torch.nn.Module): PyTorch module input (torch.Tensor): input to the module output (torch.Tensor): output of the module Returns: int: receptive field int: effective stride int: effective padding """ifisinstance(module,(nn.Identity,nn.ReLU,nn.ELU,nn.LeakyReLU,nn.ReLU6,nn.Tanh,nn.Sigmoid,_BatchNorm)):return1,1,0elifisinstance(module,_ConvTransposeNd):k=module.kernel_size[0]ifisinstance(module.kernel_size,tuple)elsemodule.kernel_sizes=module.stride[0]ifisinstance(module.stride,tuple)elsemodule.stridereturn-k,1/s,0elifisinstance(module,(_ConvNd,_MaxPoolNd,_AvgPoolNd)):k=module.kernel_size[0]ifisinstance(module.kernel_size,tuple)elsemodule.kernel_sizes=module.stride[0]ifisinstance(module.stride,tuple)elsemodule.stridep=module.padding[0]ifisinstance(module.padding,tuple)elsemodule.paddingreturnk,s,pelifisinstance(module,(_AdaptiveMaxPoolNd,_AdaptiveAvgPoolNd)):returnrf_adaptive_poolnd(module,input,output)elifisinstance(module,(nn.Dropout,nn.Linear)):return1,1,0else:warnings.warn(f'Module type not supported: {module.__class__.__name__}')return1,1,0