Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
PyTorch_Generate_CNN_Model.py File Reference

Detailed Description

View in nbviewer Open in SWAN

running Torch code defining the model....
The PyTorch CNN model is created and saved as PyTorchModelCNN.pt
import torch
from torch import nn
# Define model
print("running Torch code defining the model....")
# Custom Reshape Layer
class Reshape(torch.nn.Module):
def forward(self, x):
return x.view(-1,1,16,16)
# CNN Model Definition
Reshape(),
nn.Conv2d(1, 10, kernel_size=3, padding=1),
nn.Conv2d(10, 10, kernel_size=3, padding=1),
nn.MaxPool2d(kernel_size=2),
nn.Linear(10*8*8, 256),
nn.Linear(256, 2),
)
# Construct loss function and Optimizer.
criterion = nn.BCELoss()
optimizer = torch.optim.Adam
def fit(model, train_loader, val_loader, num_epochs, batch_size, optimizer, criterion, save_best, scheduler):
trainer = optimizer(model.parameters(), lr=0.01)
schedule, schedulerSteps = scheduler
best_val = None
# Setup GPU
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = model.to(device)
for epoch in range(num_epochs):
# Training Loop
# Set to train mode
running_train_loss = 0.0
running_val_loss = 0.0
for i, (X, y) in enumerate(train_loader):
X, y = X.to(device), y.to(device)
output = model(X)
target = y
train_loss = criterion(output, target)
# print train statistics
running_train_loss += train_loss.item()
if i % 4 == 3: # print every 4 mini-batches
print(f"[{epoch+1}, {i+1}] train loss: {running_train_loss / 4 :.3f}")
running_train_loss = 0.0
if schedule:
schedule(optimizer, epoch, schedulerSteps)
# Validation Loop
# Set to eval mode
with torch.no_grad():
for i, (X, y) in enumerate(val_loader):
X, y = X.to(device), y.to(device)
output = model(X)
target = y
val_loss = criterion(output, target)
running_val_loss += val_loss.item()
curr_val = running_val_loss / len(val_loader)
if save_best:
if best_val==None:
best_val = curr_val
best_val = save_best(model, curr_val, best_val)
# print val statistics per epoch
print(f"[{epoch+1}] val loss: {curr_val :.3f}")
running_val_loss = 0.0
print(f"Finished Training on {epoch+1} Epochs!")
return model
def predict(model, test_X, batch_size=100):
# Set to eval mode
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = model.to(device)
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=batch_size, shuffle=False)
predictions = []
with torch.no_grad():
for i, data in enumerate(test_loader):
X = data[0].to(device)
outputs = model(X)
preds = torch.cat(predictions)
return preds.cpu().numpy()
load_model_custom_objects = {"optimizer": optimizer, "criterion": criterion, "train_func": fit, "predict_func": predict}
# Store model to file
torch.jit.save(m,"PyTorchModelCNN.pt")
print("The PyTorch CNN model is created and saved as PyTorchModelCNN.pt")
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t UChar_t len
Author
Harshal Shende

Definition in file PyTorch_Generate_CNN_Model.py.