def calculate_receptive_fields(layers): """ Calculate the receptive field for each layer given a list of (kernel size, stride) tuples. Parameters: layers (list of tuples): Each tuple contains (kernel size, stride) for a layer. Returns: list: Receptive field for each layer. """ receptive_fields = [] receptive_field = 1 # The initial receptive field for the first layer for i, (kernel_size, stride) in enumerate(layers): if i == 0: receptive_field = kernel_size else: receptive_field += (kernel_size - 1) * stride receptive_fields.append(receptive_field) return receptive_fields from itertools import chain from typing import List, List, Tuple import torch def get_feature_node_RF(blocks: List[List[Tuple[int, int]]], idxs_feature_node: List[int]): lens_block = [len(l) for l in blocks] idxs_block_out_layer = torch.cumsum(torch.tensor(lens_block), -1)-1 idxs_layer_ft = idxs_block_out_layer[idxs_feature_node] layers_flatten = list(chain.from_iterable(blocks)) rfs = calculate_receptive_fields(layers_flatten) return torch.tensor(rfs)[idxs_layer_ft]