
In questo post, esaminiamo un’implementazione VGG e il suo addestramento sul set di dati STL10 (2, 3).
Abbiamo esaminato l’architettura VGG in a messaggio precedente. Per favore, dai un’occhiata se non hai familiarità.
In poche parole,
VGG sta per Gruppo di geometria visiva ed è un gruppo di ricerca presso l’Università di Oxford. Nel 2014, hanno progettato un’architettura di rete neurale convoluzionale profonda per il compito di classificazione delle immagini e le hanno dato il nome; cioè VGG (1).
VGGNet è disponibile in alcune configurazioni come VGG16 (con 16 livelli) e VGG19 (con 19 livelli).
L’architettura di VGG16 è la seguente: ha 13 livelli convoluzionali e 3 livelli completamente connessi.
Implementiamo VGG16 in PyTorch.
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
import torchvision
import torchvision.transforms as transforms
import numpy as np
import matplotlib.pyplot as pltclass VGG16(nn.Module):
def __init__(self, input_channel, num_classes):
super(VGG16, self).__init__()
self.features = nn.Sequential(
nn.Conv2d(input_channel, 64, kernel_size=3, padding=1), nn.ReLU(inplace=True),
nn.Conv2d(64, 64, kernel_size=3, padding=1), nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=2, stride=2),
nn.Conv2d(64, 128, kernel_size=3, padding=1), nn.ReLU(inplace=True),
nn.Conv2d(128, 128, kernel_size=3, padding=1), nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=2, stride=2),
nn.Conv2d(128, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True),
nn.Conv2d(256, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True),
nn.Conv2d(256, 256, kernel_size=3, padding=1), nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=2, stride=2),
nn.Conv2d(256, 512, kernel_size=3, padding=1), nn.ReLU(inplace=True),
nn.Conv2d(512…
Fonte: towardsdatascience.com