PyTorch - Pengantar Konvensi
Convents adalah tentang membangun model CNN dari awal. Arsitektur jaringan akan berisi kombinasi dari langkah-langkah berikut -
- Conv2d
- MaxPool2d
- Satuan Linear yang Diperbaiki
- View
- Lapisan Linear
Melatih Model
Melatih model adalah proses yang sama seperti masalah klasifikasi gambar. Cuplikan kode berikut menyelesaikan prosedur model pelatihan pada set data yang disediakan -
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}})
Metode tersebut mencakup logika yang berbeda untuk pelatihan dan validasi. Ada dua alasan utama untuk menggunakan mode yang berbeda -
Dalam mode kereta, pelolosan menghapus persentase nilai, yang seharusnya tidak terjadi dalam fase validasi atau pengujian.
Untuk mode pelatihan, kami menghitung gradien dan mengubah nilai parameter model, tetapi propagasi mundur tidak diperlukan selama fase pengujian atau validasi.