13 KiB
13 KiB
x = [[1,2],[3,4],[5,6],[7,8]]
y = [[3],[7],[11],[15]]
import torch
import torch.nn as nn
import numpy as np
from torch.utils.data import Dataset, DataLoader
device = 'cuda' if torch.cuda.is_available() else 'cpu'
class MyDataset(Dataset):
def __init__(self, x, y):
self.x = torch.tensor(x).float().to(device)
self.y = torch.tensor(y).float().to(device)
def __getitem__(self, ix):
return self.x[ix], self.y[ix]
def __len__(self):
return len(self.x)
ds = MyDataset(x, y)
dl = DataLoader(ds, batch_size=2, shuffle=True)
model = nn.Sequential(
nn.Linear(2, 8),
nn.ReLU(),
nn.Linear(8, 1)
).to(device)
!pip install torch_summary
from torchsummary import summary
Requirement already satisfied: torch_summary in /home/yyr/anaconda3/lib/python3.7/site-packages (1.4.1) [33mWARNING: You are using pip version 20.2.2; however, version 20.2.3 is available. You should consider upgrading via the '/home/yyr/anaconda3/bin/python -m pip install --upgrade pip' command.[0m
summary(model, torch.zeros(1,2));
========================================================================================== Layer (type:depth-idx) Output Shape Param # ========================================================================================== ├─Linear: 1-1 [-1, 8] 24 ├─ReLU: 1-2 [-1, 8] -- ├─Linear: 1-3 [-1, 1] 9 ========================================================================================== Total params: 33 Trainable params: 33 Non-trainable params: 0 Total mult-adds (M): 0.00 ========================================================================================== Input size (MB): 0.00 Forward/backward pass size (MB): 0.00 Params size (MB): 0.00 Estimated Total Size (MB): 0.00 ==========================================================================================
========================================================================================== Layer (type:depth-idx) Output Shape Param # ========================================================================================== ├─Linear: 1-1 [-1, 8] 24 ├─ReLU: 1-2 [-1, 8] -- ├─Linear: 1-3 [-1, 1] 9 ========================================================================================== Total params: 33 Trainable params: 33 Non-trainable params: 0 Total mult-adds (M): 0.00 ========================================================================================== Input size (MB): 0.00 Forward/backward pass size (MB): 0.00 Params size (MB): 0.00 Estimated Total Size (MB): 0.00 ==========================================================================================
loss_func = nn.MSELoss()
from torch.optim import SGD
opt = SGD(model.parameters(), lr = 0.001)
import time
loss_history = []
start = time.time()
for _ in range(50):
for ix, iy in dl:
opt.zero_grad()
loss_value = loss_func(model(ix),iy)
loss_value.backward()
opt.step()
loss_history.append(loss_value)
end = time.time()
print(end - start)
0.07127761840820312
Saving
save_path = 'mymodel.pth'
torch.save(model.state_dict(), save_path)
!du -hsc {save_path} # size of the model on disk
4.0K mymodel.pth 4.0K total
Loading
load_path = 'mymodel.pth'
model.load_state_dict(torch.load(load_path))
<All keys matched successfully>
Predictions
val = [[8,9],[10,11],[1.5,2.5]]
val = torch.tensor(val).float()
model(val.to(device))
tensor([[16.5265], [20.2101], [ 4.5547]], device='cuda:0', grad_fn=<AddmmBackward>)
val.sum(-1)
tensor([17., 21., 4.])