PyTorch - Introducción a los conventos
Convents se trata de construir el modelo de CNN desde cero. La arquitectura de red contendrá una combinación de los siguientes pasos:
- Conv2d
- MaxPool2d
- Unidad lineal rectificada
- View
- Capa lineal
Entrenando el modelo
El entrenamiento del modelo es el mismo proceso que los problemas de clasificación de imágenes. El siguiente fragmento de código completa el procedimiento de un modelo de entrenamiento en el conjunto de datos proporcionado:
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}})
El método incluye una lógica diferente para el entrenamiento y la validación. Hay dos razones principales para usar diferentes modos:
En el modo de tren, la deserción elimina un porcentaje de los valores, lo que no debería ocurrir en la fase de validación o prueba.
Para el modo de entrenamiento, calculamos gradientes y cambiamos el valor de los parámetros del modelo, pero la propagación hacia atrás no es necesaria durante las fases de prueba o validación.