-
-
Save dvgodoy/1d818d86a6a0dc6e7c07610835b46fe4 to your computer and use it in GitHub Desktop.
| torch.manual_seed(42) | |
| x_tensor = torch.from_numpy(x).float() | |
| y_tensor = torch.from_numpy(y).float() | |
| # Builds dataset with ALL data | |
| dataset = TensorDataset(x_tensor, y_tensor) | |
| # Splits randomly into train and validation datasets | |
| train_dataset, val_dataset = random_split(dataset, [80, 20]) | |
| # Builds a loader for each dataset to perform mini-batch gradient descent | |
| train_loader = DataLoader(dataset=train_dataset, batch_size=16) | |
| val_loader = DataLoader(dataset=val_dataset, batch_size=20) | |
| # Builds a simple sequential model | |
| model = nn.Sequential(nn.Linear(1, 1)).to(device) | |
| print(model.state_dict()) | |
| # Sets hyper-parameters | |
| lr = 1e-1 | |
| n_epochs = 150 | |
| # Defines loss function and optimizer | |
| loss_fn = nn.MSELoss(reduction='mean') | |
| optimizer = optim.SGD(model.parameters(), lr=lr) | |
| losses = [] | |
| val_losses = [] | |
| # Creates function to perform train step from model, loss and optimizer | |
| train_step = make_train_step(model, loss_fn, optimizer) | |
| # Training loop | |
| for epoch in range(n_epochs): | |
| # Uses loader to fetch one mini-batch for training | |
| for x_batch, y_batch in train_loader: | |
| # NOW, sends the mini-batch data to the device | |
| # so it matches location of the MODEL | |
| x_batch = x_batch.to(device) | |
| y_batch = y_batch.to(device) | |
| # One stpe of training | |
| loss = train_step(x_batch, y_batch) | |
| losses.append(loss) | |
| # After finishing training steps for all mini-batches, | |
| # it is time for evaluation! | |
| # We tell PyTorch to NOT use autograd... | |
| # Do you remember why? | |
| with torch.no_grad(): | |
| # Uses loader to fetch one mini-batch for validation | |
| for x_val, y_val in val_loader: | |
| # Again, sends data to same device as model | |
| x_val = x_val.to(device) | |
| y_val = y_val.to(device) | |
| # What is that?! | |
| model.eval() | |
| # Makes predictions | |
| yhat = model(x_val) | |
| # Computes validation loss | |
| val_loss = loss_fn(y_val, yhat) | |
| val_losses.append(val_loss.item()) | |
| print(model.state_dict()) | |
| print(np.mean(losses)) | |
| print(np.mean(val_losses)) |
This is really helpful!
Thank you for this really complete and helpfull tutorial !
This was actually very helpful, thanks!
Thank you !
How would you implement a standard scaler into this workflow? You want to scale after the train-test split because it should be fit only on training data, but would you do that for each individual batch? Pytorch must have a standard scaler for Dataset objects no?
Thanks for the tutorial!
this is the best PyTorch 101 I have encountered so far. Thank you very much!
Thank you so much for your great tutorial!!🤗
I used to live in TensorFlow world, and moved to fastai one 2 years ago.
These days, I've been wondering what's going on inside fastai...
After reading your blog post, I got a super solid foundation of pytorch!
Thanks a lot for the amazing blog.
Thanks for the great tutorial about the basics of Pytorch
This is such a a good, concise tutorial! it helped a lot. Thank you!
great tutorial, thanks. I have a question, what a boat inference codes for new data, we should first save our model and load and run on new data like validation codes, right? in the case of 2-fold cross validation with k=5 when save the models(5models for k=5), when I load and run, all the 5 model have the same accuracy. I dont know what is wrong ?
This was really helpful.