code: def __init__(self, in_channels, out_channels):
      super().__init__()
      self.module_dict = nn.ModuleDict(
          {
              "conv": nn.Conv2d(in_channels, out_channels, 3),
              "act": nn.ReLU(),
          }
      )
      # add trivial test parameter to convblock to validate parent (non-leaf) module parameter handling
      self.parent_param = nn.Parameter(
          torch.zeros((1), dtype=torch.float)
      )
      self.bn = nn.BatchNorm2d(out_channels)
  
imports: from collections import OrderedDict
  import pytest
  import torch
  from lightning.fabric.utilities.imports import _TORCH_GREATER_EQUAL_1_13
  from lightning.pytorch import LightningModule, Trainer, seed_everything
  from lightning.pytorch.callbacks import BackboneFinetuning, BaseFinetuning, ModelCheckpoint
  from lightning.pytorch.demos.boring_classes import BoringModel, RandomDataset
  from torch import nn
  from torch.optim import SGD, Optimizer
  from torch.utils.data import DataLoader
  from tests_pytorch.helpers.runif import RunIf
label_desc: Use image node_id 1 to create a new ConvBlockParam object from inherited base classes: nn with example: obj = ConvBlockParam(in_channels, out_channels)