class_docstr: An energy function E(x, y) for visual single-label classification.
  
  An energy function takes an image x and label y
  as the input and outputs a real number.
  We use a LeNet-style architecture to extract an embedding from x
  that is that concatenated with y and passed through a single hidden
  layer fully-connected network.
  
  Args:
      n_fc_hidden (int): The number of hidden units the
        fully-connected layers have.
      n_cls (int): The number of classes.
class_docstr_tok: ["An","energy","function","E","(","x",",","y",")","for","visual","single-label","classification",".","An","energy","function","takes","an","image","x","and","label","y","as","the","input","and","outputs","a","real","number",".","We","use","a","LeNet-style","architecture","to","extract","an","embedding","from","x","that","is","that","concatenated","with","y","and","passed","through","a","single","hidden","layer","fully-connected","network",".","Args",":","n_fc_hidden","(","int",")",":","The","number","of","hidden","units","the","fully-connected","layers","have",".","n_cls","(","int",")",":","The","number","of","classes","."]
code: def __init__(self, n_fc_hidden: int = 500, n_cls: int = 10):
      super(EnergyNet, self).__init__()
      self.conv1 = nn.Conv2d(1, 20, 5, 1)
      self.conv2 = nn.Conv2d(20, 50, 5, 1)
      self.fc1 = nn.Linear(4 * 4 * 50, n_fc_hidden)
      self.fc2 = nn.Linear(n_fc_hidden, n_fc_hidden)
  
      self.fce1 = nn.Linear(n_fc_hidden + n_cls, n_fc_hidden)
      self.fce2 = nn.Linear(n_fc_hidden, 1)
  
imports: import argparse
  import typing
  import torch
  from torch import nn
  from torch.utils.data import DataLoader
  import torch.nn.functional
  import torch.optim
  from torchvision import datasets, transforms
  import higher
label_desc: Use image node_id 1 to create a new EnergyNet object from inherited base classes: nn with example: obj = EnergyNet(n_fc_hidden, n_cls)