-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
88 lines (64 loc) · 2.77 KB
/
main.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import torch
import torch.nn as nn
from torch.autograd import Variable
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms
import torchvision.datasets as datasets
import matplotlib.pyplot as plt
import numpy as np
import random
from model import network
from loader import SawyerSimDataset
# Hyperparameters
batch_size = 64
num_epochs = 10
input_size = 1024
time_step = 4
learning_rate = 0.0001
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
print(device)
# https://pytorch.org/docs/stable/torchvision/datasets.html#imagefolder
train_dataset = SawyerSimDataset(csv_file='/home/yena/test_label.csv',
root_dir='/home/yena/saved_imgs',
transform=transforms.ToTensor())
# test_dataset = torchvision.datasets.DatsetFolder(root='./data',
# train=False,
# transform=transforms.ToTensor())
print('Number of train images: {}'.format(len(train_dataset)))
# print('Number of test images: {}'.format(len(test_dataset)))
# Data loader
train_loader = torch.utils.data.DataLoader(dataset=train_dataset,
batch_size=batch_size,
shuffle=True)
# test_loader = torch.utils.data.DataLoader(dataset=test_dataset,
# batch_size=batch_size,
# shuffle=False)
total_step = len(train_loader)
# Get single image data
image_tensor, image_label = train_dataset.__getitem__(random.randint(0, len(train_dataset)))
print('Size of single image tensor: {}'.format(image_tensor.size()))
# Torch tensor to numpy array
image_array = image_tensor.squeeze().numpy()
print('Size of single image array: {}\n'.format(image_array.shape))
# Plot image
plt.title('Image of {}'.format(image_label))
plt.imshow(image_array, cmap='gray')
## training step
model = network.to(device)
criterion = nn.MSELoss() # combines nn.LogSoftmax() and nn.NLLLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
for epoch in range(num_epochs):
for i, (images, labels) in enumerate(train_loader):
images = images.view(-1, input_size, time_step).to(device)
labels = labels.to(device)
# Forward pass
outputs = model(images)
loss = criterion(outputs, labels)
# Backward and optimize
optimizer.zero_grad()
loss.backward()
optimizer.step()
if (i + 1) % 100 == 0:
print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}'
.format(epoch + 1, num_epochs, i + 1, total_step, loss.item()))