[Python] Ml Models saving

Discussão em 'Python' iniciado por Stack, Fevereiro 10, 2025.

  1. Stack

    Stack Membro Participativo

    I am training a machine learning model to classify Alzheimer's disease into four categories. After running the training epochs, I used code to save the model in a .pth file. However, after downloading the saved model and connecting it with my interface, it did not yield any results. Upon further inspection, it seems that the model is empty.

    import torch
    import torch.nn as nn
    import torch.optim as optim
    from tqdm.auto import tqdm
    from torchvision import models

    # Set device (GPU if available)
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

    # Define the ResNet18 model
    class ResNet18(nn.Module):
    def __init__(self, num_classes):
    super(ResNet18, self).__init__()
    self.model = models.resnet18(pretrained=False) # Set to True to use pre-trained weights
    self.model.fc = nn.Linear(self.model.fc.in_features, num_classes) # Modify the final layer

    def forward(self, x):
    return self.model(x)

    # Initialize the model with the number of classes in your dataset
    num_classes = len(train_data_simple.classes) # Adjust this based on your augmented dataset
    model_resnet = ResNet18(num_classes=num_classes).to(device)

    # Loss function and optimizer (SGD and CrossEntropy)
    loss_fn = nn.CrossEntropyLoss()
    optimizer = optim.SGD(model_resnet.parameters(), lr=0.1, momentum=0.9)

    # Training loop (with progress bar using tqdm)
    def train(model, train_dataloader, test_dataloader, optimizer, loss_fn, epochs):
    for epoch in tqdm(range(epochs)):
    model.train() # Set the model to training mode
    running_loss = 0.0
    correct_train, total_train = 0, 0

    for batch, (X, y) in enumerate(train_dataloader):
    X, y = X.to(device), y.to(device)

    optimizer.zero_grad() # Zero the gradients

    outputs = model(X) # Forward pass
    loss = loss_fn(outputs, y) # Compute loss

    loss.backward() # Backpropagation
    optimizer.step() # Update the weights

    running_loss += loss.item()
    _, predicted = torch.max(outputs.data, 1)
    total_train += y.size(0)
    correct_train += (predicted == y).sum().item()

    # Print training loss and accuracy
    print(f"Epoch [{epoch+1}/{epochs}], Loss: {running_loss/len(train_dataloader):.4f}")
    print(f"Training Accuracy: {100 * correct_train / total_train:.2f}%")

    # Validation
    model.eval() # Switch model to evaluation mode for validation
    correct_val, total_val = 0, 0
    with torch.no_grad():
    for X_val, y_val in test_dataloader:
    X_val, y_val = X_val.to(device), y_val.to(device)
    val_outputs = model(X_val)
    _, predicted = torch.max(val_outputs.data, 1)
    total_val += y_val.size(0)
    correct_val += (predicted == y_val).sum().item()

    # Print validation accuracy
    print(f"Validation Accuracy: {100 * correct_val / total_val:.2f}%")

    return model

    # Example training
    NUM_EPOCHS = 30 # Adjust epochs as per your requirement
    # Use the augmented training data loader
    trained_model_resnet = train(model_resnet, train_dataloader_simple, test_dataloader_simple, optimizer, loss_fn, NUM_EPOCHS)



    this is the code i ran in different cell to save the model

    # Save the trained model
    model_path = "trained_resnet18_model.pth"
    torch.save(model_resnet.state_dict(), model_path)
    print(f"Model saved to {model_path}")


    "I'm training a machine learning model to classify Alzheimer's disease into four categories using [please specify your framework, e.g., TensorFlow/Keras or PyTorch]. After running the training over several epochs, I want to save the trained model using code like model.save('my_model.h5') or torch.save(model.state_dict(), 'model.pth').

    Should I add the code to save the trained model in the same cell where the training epochs are defined and the training loop runs, or is it better to place it in a different cell? Does the placement affect how the model is saved or how I can load it later?"

    Continue reading...

Compartilhe esta Página