PyTorch Get Started ======================== :date: 19 oct 2019 Credit --------- PyTorch Official Tutorial WHAT IS PYTORCH? ---------------- .. code:: python import torch;import numpy as np x=torch.empty([2,3]) # shape=[2,3] x=torch.rand([2,3]) # shape=[2,3] x=torch.zeros([2,3],dtype=torch.float) # shape=[2,3] x=torch.tensor([1.,6]) x=x.new_ones([2,3],dtype=torch.double) # shape=[2,3] x=torch.randn_like(x,dtype=torch.float) print(x);print(x.shape) print(x[0,:]);print(x[:,0]) y=torch.rand([2,3]) # shape=[2,3] print(x+y);print(torch.add(x,y)); print(y.add_(x)) # y is changed a=x.view([6]);b=x.view([-1,2]) print(x.shape,a.shape,b.shape) a=x.numpy();print(a) x.add_(1);print(a) # a changes with x ! a=np.ones([3]) # shape=[3] b=torch.from_numpy(a) np.add(a,1,out=a) print(a);print(b) # b changes with a ! device = torch.device("cuda" if torch.cuda.is_available() else "cpu") y=torch.ones_like(x,device=device) # create on "device" directly x=x.to(device) # alternative z=x+y print(z);print(z.to("cpu"));print(z.to("cpu",torch.double)) .. parsed-literal:: tensor([[ 1.3245, -0.1591, 0.5772], [-0.3548, 2.1270, -2.4076]]) torch.Size([2, 3]) tensor([ 1.3245, -0.1591, 0.5772]) tensor([ 1.3245, -0.3548]) tensor([[ 1.4469, 0.7045, 1.0438], [ 0.0810, 2.9837, -1.5898]]) tensor([[ 1.4469, 0.7045, 1.0438], [ 0.0810, 2.9837, -1.5898]]) tensor([[ 1.4469, 0.7045, 1.0438], [ 0.0810, 2.9837, -1.5898]]) torch.Size([2, 3]) torch.Size([6]) torch.Size([3, 2]) [[ 1.3244952 -0.15909314 0.57717997] [-0.35482323 2.126999 -2.4075844 ]] [[ 2.3244953 0.84090686 1.5771799 ] [ 0.64517677 3.126999 -1.4075844 ]] [2. 2. 2.] tensor([2., 2., 2.], dtype=torch.float64) tensor([[ 3.3245, 1.8409, 2.5772], [ 1.6452, 4.1270, -0.4076]]) tensor([[ 3.3245, 1.8409, 2.5772], [ 1.6452, 4.1270, -0.4076]]) tensor([[ 3.3245, 1.8409, 2.5772], [ 1.6452, 4.1270, -0.4076]], dtype=torch.float64) AUTOGRAD -------- .. code:: python print("\nWrong usage: Used by a AND b") x=torch.ones([2,2],requires_grad=True) a=torch.sum(x);b=torch.sum(x*2) a.backward();print(a);print(x.grad) # da/dx b.backward();print(b);print(x.grad) # db/dx print("\nRight usage: Used by a OR b") x=torch.ones([2,2],requires_grad=True) a=torch.sum(x) a.backward();print(a);print(x.grad) # da/dx x=torch.ones([2,2],requires_grad=True) b=torch.sum(x*2) b.backward();print(b);print(x.grad) # db/dx .. parsed-literal:: Wrong usage: Used by a AND b tensor(4., grad_fn=) tensor([[1., 1.], [1., 1.]]) tensor(8., grad_fn=) tensor([[3., 3.], [3., 3.]]) Right usage: Used by a OR b tensor(4., grad_fn=) tensor([[1., 1.], [1., 1.]]) tensor(8., grad_fn=) tensor([[2., 2.], [2., 2.]]) .. code:: python x=torch.randn([3], requires_grad=True) y=x*2 v=torch.randn([3], requires_grad=True) y.backward(v) print(x.grad) with torch.no_grad(): print((x**2).requires_grad) .. parsed-literal:: tensor([-0.9035, -0.0756, 1.8223]) False NEURAL NETWORKS --------------- .. figure:: data:image/png;base64,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 :alt: image.webp image.webp Kernel with padding ~~~~~~~~~~~~~~~~~~~ .. figure:: data:image/png;base64,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 :alt: image.webp image.webp Stride (3,2) (height,width) ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. figure:: data:image/png;base64,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 :alt: image.webp image.webp .. code:: python import torch import torch.nn as nn import torch.nn.functional as F class Net(nn.Module): def __init__(self): super(Net,self).__init__() # 1 input image channel, 6 output channels, 3x3 square conv self.conv1=nn.Conv2d(1,6,3) self.conv2=nn.Conv2d(6,16,3) self.linear1=nn.Linear(16*6*6,120) self.linear2=nn.Linear(120,6) def forward(self,x): # max pooling over (2,2) window x=F.max_pool2d(F.relu(self.conv1(x)),(2,2)) # 1 number if square shape x=F.max_pool2d(F.relu(self.conv2(x)),2) x=x.view(-1,self.numFlatFeatures(x)) x=F.relu(self.linear1(x)) return self.linear2(x) def numFlatFeatures(self,x): shapes=x.shape[1:] # all but Batch dimension(0) numFeatures=1 for s in shapes: numFeatures*=s return numFeatures net=Net();print(net) params=list(net.parameters()) for i in range(len(params)): print(i,params[i].shape) batchSize=2 input=torch.randn([batchSize,1,32,32]) output=net(input) print(output);print(output.shape) #================================== # Begin Custom optimizer net.zero_grad() # Zero the gradient buffers of all parameters #output.backward(torch.randn(output.shape)) target=torch.randn(output.shape) criterion=nn.MSELoss() # This is a class loss=criterion(output,target) print(loss) grad_fn=loss.grad_fn while(grad_fn): print(grad_fn) try: grad_fn=grad_fn.next_functions[0][0] except: break # Clear existing gradients # else gradients will be accumulated to existing gradients net.zero_grad() print('net.conv1.bias.grad before backward:',net.conv1.bias.grad) loss.backward() print('net.conv1.bias.grad after backward:',net.conv1.bias.grad) learnRate=0.01 for parameter in net.parameters(): parameter.data.sub_(learnRate*parameter.grad.data) # End Custom optimizer #================================== #================================== # Begin Torch optimizer import torch.optim as optim optimizer=optim.SGD(net.parameters(),lr=learnRate) optimizer.zero_grad() output=net(input) loss=criterion(output,target) loss.backward() optimizer.step() # End Torch optimizer #================================== .. parsed-literal:: Net( (conv1): Conv2d(1, 6, kernel_size=(3, 3), stride=(1, 1)) (conv2): Conv2d(6, 16, kernel_size=(3, 3), stride=(1, 1)) (linear1): Linear(in_features=576, out_features=120, bias=True) (linear2): Linear(in_features=120, out_features=6, bias=True) ) 0 torch.Size([6, 1, 3, 3]) 1 torch.Size([6]) 2 torch.Size([16, 6, 3, 3]) 3 torch.Size([16]) 4 torch.Size([120, 576]) 5 torch.Size([120]) 6 torch.Size([6, 120]) 7 torch.Size([6]) tensor([[-0.0427, 0.2950, -0.0963, -0.0848, 0.0039, -0.1088], [-0.0443, 0.3183, -0.0833, -0.0584, -0.1068, -0.0729]], grad_fn=) torch.Size([2, 6]) tensor(1.1637, grad_fn=) net.conv1.bias.grad before backward: None net.conv1.bias.grad after backward: tensor([-0.0616, 0.0531, 0.0373, 0.0389, 0.0173, -0.0261]) TRAINING A CLASSIFIER --------------------- .. code:: python path='./net.pth' torch.save(net.state_dict(),path) net2=Net() net2.load_state_dict(torch.load(path)) .. parsed-literal::