torchbenchmark/models/squeezenet1_1/__init__.py (22 lines of code) (raw):
from torchbenchmark.util.framework.vision.model_factory import TorchVisionModel
from torchbenchmark.tasks import COMPUTER_VISION
import torch.optim as optim
import torch
class Model(TorchVisionModel):
task = COMPUTER_VISION.CLASSIFICATION
# Original train batch size: 512, out of memory on V100 GPU
# Use hierarchical batching to scale down: 512 = batch_size (32) * epoch_size (16)
# Source: https://github.com/forresti/SqueezeNet
DEFAULT_TRAIN_BSIZE = 32
DEFAULT_EVAL_BSIZE = 16
def __init__(self, test, device, jit=False, batch_size=None, extra_args=[]):
super().__init__(model_name="squeezenet1_1", test=test, device=device, jit=jit,
batch_size=batch_size, extra_args=extra_args)
self.epoch_size = 16
def train(self, niter=1):
optimizer = optim.Adam(self.model.parameters())
loss = torch.nn.CrossEntropyLoss()
for _ in range(niter):
optimizer.zero_grad()
for _ in range(self.epoch_size):
pred = self.model(*self.example_inputs)
y = torch.empty(pred.shape[0], dtype=torch.long, device=self.device).random_(pred.shape[1])
loss(pred, y).backward()
optimizer.step()