I think I figured it out somewhat:
Using the pattern generated by Torch7’s loadcaffe (Lua), it looks like only 2 values need to be changed, and they are predictable.
import torch
import torch.legacy.nn as lnn
import torch.nn as nn

import torchvision
import torchvision.models as models

from torch.legacy.nn import SpatialConvolution
from torch.legacy.nn import SpatialMaxPooling

cnn = models.vgg19(pretrained=True)#.features
cnn.cuda()
print(cnn)

#VGG19 Pattern
num_channel1 = [3, 64, 64, 128, 128, 256, 256, 256, 256, 512, 512, 512, 512, 512, 512, 512]
num_channel2 = [64, 64, 128, 128, 256, 256, 256, 256, 512, 512, 512, 512, 512, 512, 512, 512]

conv_num = [1]
for idx, module in cnn.features._modules.items():
	#if module.__class__.__name__ == 'ReLU':
            #print("ReLU!")
        if module.__class__.__name__ == 'Conv2d':
            #print("Conv!")
            print(cnn.features._modules[idx])
            c = conv_num[0]
            channels_1 = num_channel1[c]
            channels_2 = num_channel2[c]
            print(channels_1, " ", channels_2)
            cnn.features._modules[idx] = SpatialConvolution(channels_1, channels_2, 3, 3, 1, 1, 1, 1)
            print(cnn.features._modules[idx])
            conv_num[0] += 1
        if module.__class__.__name__ == 'MaxPool2d':
            #print("Pool!")
            cnn.features._modules[idx] = SpatialMaxPooling(2, 2, 2, 2, 0, 0)
print(cnn)

Now there is this error:
cnn.features._modules[idx] = SpatialConvolution(channels_1, channels_2, 3, 3, 1, 1, 1, 1, 1)
TypeError: __init__() takes at most 9 arguments (10 given)

Looking at the loadcaffe values, it appears that 10 are required, and PyTorch’s SpatialConvolution is meant to be like Lua’s SpatialConvolution:
table.insert(model, {'conv2_2', cudnn.SpatialConvolution(128, 128, 3, 3, 1, 1, 1, 1, 1)})

Omitting one of the 1s from (channels_1, channels_2, 3, 3, 1, 1, 1, 1, 1) makes things run smoothly until another error occurs.
Adding another 512 to num_channel1 and num_channel2, fixes that error.