-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathtrain.py
66 lines (57 loc) · 1.56 KB
/
train.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
from src import detect_faces, show_bboxes,cal_landmark
from PIL import Image
import os
import torch
from torch import nn
from torch.utils.data import Dataset
from torch.utils.data import DataLoader
import numpy as np
import cv2
import numpy.random as npr
import sys
import utils as utils
from torch.autograd import Variable
import torchvision.models as models
import torch.optim as optim
from data_load import my_dataset
from net import Net
size = 96
#data
labelpath = '/home/lc/106_resnet/96_landmark.txt' #the ground truth
dataset = my_dataset(labelpath)
dataset.load()
dataLoader = DataLoader(dataset=dataset,batch_size=50,shuffle=True)
#net
resnet = models.resnet18(pretrained=True)
net = Net(resnet)
#train
criterion = nn.MSELoss()
optimizer = optim.Adam(net.parameters(),lr=0.001)
losses = []
acces = []
eval_losses = []
eval_acces = []
for e in range(2):
train_loss = 0
train_acc = 0
net.float().cuda()
net.train()
for i, (im, label) in enumerate(dataLoader):
im =im.type('torch.FloatTensor')
im = Variable(im).cuda()
label = Variable(label).cuda()
out = net(im)
loss = criterion(out, label)
optimizer.zero_grad()
loss.backward()
optimizer.step()
train_loss += loss
eval_loss = 0
# for im, label in testdataLoader:
# im = Variable(im)
# label = Variable(label)
# out = net(im)
# loss = criterion(out, label)
# eval_loss += loss
print('epoch: {}, Train Loss: {:.6f}'.format(e, train_loss / len(dataLoader)))
torch.save(net, 'my_net.pkl')