code: def forward(self, x, params=None):
      if params is None:
          x = self.features(x).view(x.size(0), 64)
          x = self.fc(x)
      else:
          x = F.conv2d(
              x,
              params["features.conv1.weight"],
              params["features.conv1.bias"],
          )
          x = self.batch_norm(
              x,
              weight=params["features.bn1.weight"],
              bias=params["features.bn1.bias"],
              momentum=1,
          )
          x = F.relu(x)
          x = self.maxpool(x, kernel_size=2, stride=2)
          x = F.conv2d(
              x,
              params["features.conv2.weight"],
              params["features.conv2.bias"],
          )
          x = self.batch_norm(
              x,
              weight=params["features.bn2.weight"],
              bias=params["features.bn2.bias"],
              momentum=1,
          )
          x = F.relu(x)
          x = self.maxpool(x, kernel_size=2, stride=2)
          x = F.conv2d(
              x,
              params["features.conv3.weight"],
              params["features.conv3.bias"],
          )
          x = self.batch_norm(
              x,
              weight=params["features.bn3.weight"],
              bias=params["features.bn3.bias"],
              momentum=1,
          )
          x = F.relu(x)
          x = self.maxpool(x, kernel_size=2, stride=2)
          x = x.view(x.size(0), 64)
          x = F.linear(x, params["fc.weight"], params["fc.bias"])
      return x
  
imports: import unittest
  import copy
  from collections import OrderedDict
  import numpy
  import torch
  from torch import nn, optim
  from torch.nn import functional
  import higher
label_desc: Use image node_id 4 for calling the _ReferenceNet obj's underlying member method code with example usage: obj.forward(x, params) and returns: x