PyTorch - Introduction aux couvents
Les couvents consistent à construire le modèle CNN à partir de zéro. L'architecture du réseau contiendra une combinaison des étapes suivantes -
- Conv2d
- MaxPool2d
- Unité linéaire rectifiée
- View
- Couche linéaire
Entraîner le modèle
La formation du modèle est le même processus que les problèmes de classification d'image. L'extrait de code suivant complète la procédure d'un modèle d'entraînement sur l'ensemble de données fourni -
def fit(epoch,model,data_loader,phase
= 'training',volatile = False):
if phase == 'training':
model.train()
if phase == 'training':
model.train()
if phase == 'validation':
model.eval()
volatile=True
running_loss = 0.0
running_correct = 0
for batch_idx , (data,target) in enumerate(data_loader):
if is_cuda:
data,target = data.cuda(),target.cuda()
data , target = Variable(data,volatile),Variable(target)
if phase == 'training':
optimizer.zero_grad()
output = model(data)
loss = F.nll_loss(output,target)
running_loss + =
F.nll_loss(output,target,size_average =
False).data[0]
preds = output.data.max(dim = 1,keepdim = True)[1]
running_correct + =
preds.eq(target.data.view_as(preds)).cpu().sum()
if phase == 'training':
loss.backward()
optimizer.step()
loss = running_loss/len(data_loader.dataset)
accuracy = 100. * running_correct/len(data_loader.dataset)
print(f'{phase} loss is {loss:{5}.{2}} and {phase} accuracy is {running_correct}/{len(data_loader.dataset)}{accuracy:{return loss,accuracy}})
La méthode comprend différentes logiques pour la formation et la validation. Il y a deux raisons principales pour utiliser différents modes -
En mode train, l'abandon supprime un pourcentage de valeurs, ce qui ne devrait pas se produire lors de la phase de validation ou de test.
Pour le mode d'apprentissage, nous calculons les gradients et modifions la valeur des paramètres du modèle, mais la rétro-propagation n'est pas nécessaire pendant les phases de test ou de validation.