Daniel Voigt Godoy - Deep Learning with PyTorch Step-by-Step A Beginner’s Guide-leanpub

peiying410632
from peiying410632 More from this publisher
22.02.2024 Views

Apart from returning the loss value, the inner perform_train_step_fn() functionbelow is exactly the same as the code inside the loop in Model Training V0. Thecode should look like this:Helper Function #11 def make_train_step_fn(model, loss_fn, optimizer):2 # Builds function that performs a step in the train loop3 def perform_train_step_fn(x, y):4 # Sets model to TRAIN mode5 model.train()67 # Step 1 - Computes model's predictions - forward pass8 yhat = model(x)9 # Step 2 - Computes the loss10 loss = loss_fn(yhat, y)11 # Step 3 - Computes gradients for "b" and "w" parameters12 loss.backward()13 # Step 4 - Updates parameters using gradients and14 # the learning rate15 optimizer.step()16 optimizer.zero_grad()1718 # Returns the loss19 return loss.item()2021 # Returns the function that will be called inside the22 # train loop23 return perform_train_step_fnThen we need to update our model configuration code (adding line 20 in the nextsnippet) to call this higher-order function to build a train_step_fn() function. Butwe need to run a data preparation script first.Run - Data Preparation V0%run -i data_preparation/v0.pyRethinking the Training Loop | 131

Define - Model Configuration V11 %%writefile model_configuration/v1.py23 device = 'cuda' if torch.cuda.is_available() else 'cpu'45 # Sets learning rate - this is "eta" ~ the "n"-like Greek letter6 lr = 0.178 torch.manual_seed(42)9 # Now we can create a model and send it at once to the device10 model = nn.Sequential(nn.Linear(1, 1)).to(device)1112 # Defines an SGD optimizer to update the parameters13 optimizer = optim.SGD(model.parameters(), lr=lr)1415 # Defines an MSE loss function16 loss_fn = nn.MSELoss(reduction='mean')1718 # Creates the train_step function for our model, loss function19 # and optimizer20 train_step_fn = make_train_step_fn(model, loss_fn, optimizer) 11 Creating a function that performs a training stepRun - Model Configuration V1%run -i model_configuration/v1.pyLet’s check our train_step_fn() function out!train_step_fnOutput<function __main__.make_train_step_fn.<locals>\.perform_train_step_fn(x, y)>Looking good! Now we need to update our model training to replace the codeinside the loop with a call to our newly created function.132 | Chapter 2: Rethinking the Training Loop

Define - Model Configuration V1

1 %%writefile model_configuration/v1.py

2

3 device = 'cuda' if torch.cuda.is_available() else 'cpu'

4

5 # Sets learning rate - this is "eta" ~ the "n"-like Greek letter

6 lr = 0.1

7

8 torch.manual_seed(42)

9 # Now we can create a model and send it at once to the device

10 model = nn.Sequential(nn.Linear(1, 1)).to(device)

11

12 # Defines an SGD optimizer to update the parameters

13 optimizer = optim.SGD(model.parameters(), lr=lr)

14

15 # Defines an MSE loss function

16 loss_fn = nn.MSELoss(reduction='mean')

17

18 # Creates the train_step function for our model, loss function

19 # and optimizer

20 train_step_fn = make_train_step_fn(model, loss_fn, optimizer) 1

1 Creating a function that performs a training step

Run - Model Configuration V1

%run -i model_configuration/v1.py

Let’s check our train_step_fn() function out!

train_step_fn

Output

<function __main__.make_train_step_fn.<locals>\

.perform_train_step_fn(x, y)>

Looking good! Now we need to update our model training to replace the code

inside the loop with a call to our newly created function.

132 | Chapter 2: Rethinking the Training Loop

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!