Here’s a basic example: (sorry for the late reply, was out of town)
class Net(nn.Module):
  def __init__(self):
    super(Net, self).__init__()
    self.pool = nn.MaxPool2d(2, 2)

    #1st net
    self.conv1 = nn.Conv2d(3, 64, 3, padding = 1)
    self.conv2 = nn.Conv2d(64, 128, 3, padding = 1)
    self.conv3 = nn.Conv2d(128, 256, 3, padding = 1)
    self.conv4 = nn.Conv2d(256, 256, 3, padding = 1)
    self.conv5 = nn.Conv2d(256, 512, 3, padding = 1)
    self.conv6 = nn.Conv2d(512, 512, 3, padding = 1)
    self.conv7 = nn.Conv2d(512, 512, 3, padding = 1)
    self.conv8 = nn.Conv2d(512, 512, 3, padding = 1)

    self.fc1 = nn.Linear(512*9, 4096)
    self.fc2 = nn.Linear(4096, 4096)

    #2nd net
    self.conv1o = nn.Conv2d(1, 3, 2)
    self.conv2o = nn.Conv2d(3, 3, 2)
    self.fc1o = nn.Linear(16 * 5 * 5, 120)
    self.fc2o = nn.Linear(120, 84)

  def forward(self, x, y):
    x = self.pool(F.relu(self.conv1(x)))
    x = self.pool(F.relu(self.conv2(x)))
    x = F.relu(self.conv3(x))
    x = self.pool(F.relu(self.conv4(x)))
    x = F.relu(self.conv5(x))
    x = self.pool(F.relu(self.conv6(x)))
    x = F.relu(self.conv7(x))
    x = self.pool(F.relu(self.conv8(x)))

    x = x.view(-1, 512*9) #can also do x.view(-1, 1)

    y = F.relu(self.conv1o(y))
    y = F.relu(self.conv2o(y))
    y = x.view(-1, 1)
    y = F.relu(self.fc1o(y))
    y = F.relu(self.fc2o(y))

    x = F.relu(self.fc1(x))
    x = F.dropout(x, training = self.training)
    x = F.relu(self.fc2(x))
    x = F.dropout(x, training = self.training)

    x = torch.cat((x, y))

    return F.log_softmax(x)