my_project.train

Training utilities for the automobile price prediction model.

  1"""Training utilities for the automobile price prediction model."""
  2
  3from pathlib import Path
  4
  5import torch
  6import torch.nn as nn
  7from torch.utils.data import DataLoader
  8
  9from my_project.dataset import AutomobileDataset
 10
 11
 12def create_model(input_size: int) -> nn.Module:
 13
 14    """Create the neural network used for price prediction.
 15
 16    Parameters
 17    ----------
 18    input_size : int
 19        Number of input features.
 20
 21    Returns
 22    -------
 23    torch.nn.Module
 24        Neural network for predicting automobile selling prices.
 25
 26    """
 27
 28    return nn.Sequential(
 29        nn.Linear(input_size, 32),
 30        nn.ReLU(),
 31        nn.Linear(32, 1)
 32    )
 33
 34
 35def train_model(
 36    model: nn.Module,
 37    train_loader: DataLoader,
 38    epochs: int = 100,
 39    learning_rate: float = 0.001
 40) -> nn.Module:
 41
 42    """Train the automobile price prediction model.
 43
 44    Parameters
 45    ----------
 46    model : torch.nn.Module
 47        Neural network to train.
 48
 49    train_loader : torch.utils.data.DataLoader
 50        DataLoader containing the training data.
 51
 52    epochs : int, default=100
 53        Number of training epochs.
 54
 55    learning_rate : float, default=0.001
 56        Learning rate used by the Adam optimizer.
 57
 58    Returns
 59    -------
 60    torch.nn.Module
 61        The trained model.
 62
 63    """
 64
 65    loss_fn = nn.MSELoss()
 66
 67    optimizer = torch.optim.Adam(
 68        model.parameters(),
 69        lr=learning_rate
 70    )
 71
 72    for epoch in range(epochs):
 73
 74        for X, y in train_loader:
 75            prediction = model(X).squeeze()
 76            loss = loss_fn(prediction, y)
 77
 78            optimizer.zero_grad()
 79            loss.backward()
 80            optimizer.step()
 81
 82        print(f"Epoch {epoch + 1}, Loss: {loss.item():.4f}")
 83
 84    return model
 85
 86
 87def main():
 88    """Train the automobile price prediction model and save it to disk."""
 89
 90    PROCESSED_TRAIN_FILE = "data/processed/automobile_dataset"
 91    PROCESSED_TEST_FILE = "data/processed/automobile_test"
 92    MODEL_PATH = Path("models/automobile_model.pth")
 93
 94    MODEL_PATH.parent.mkdir(parents=True, exist_ok=True)
 95
 96    train_dataset = AutomobileDataset(
 97        f"{PROCESSED_TRAIN_FILE}.parquet"
 98    )
 99
100    test_dataset = AutomobileDataset(
101        f"{PROCESSED_TEST_FILE}.parquet"
102    )
103
104    train_loader = DataLoader(
105        train_dataset,
106        batch_size=32,
107        shuffle=True
108    )
109
110    # The test loader is prepared here for later evaluation.
111    test_loader = DataLoader(
112        test_dataset,
113        batch_size=32,
114        shuffle=False
115    )
116
117    model = create_model(train_dataset.X.shape[1])
118
119    model = train_model(
120        model,
121        train_loader
122    )
123
124    torch.save(
125        model.state_dict(),
126        MODEL_PATH
127    )
128
129    print(f"Model saved to {MODEL_PATH}")
130
131
132if __name__ == "__main__":
133    main()
def create_model(input_size: int) -> torch.nn.modules.module.Module:
13def create_model(input_size: int) -> nn.Module:
14
15    """Create the neural network used for price prediction.
16
17    Parameters
18    ----------
19    input_size : int
20        Number of input features.
21
22    Returns
23    -------
24    torch.nn.Module
25        Neural network for predicting automobile selling prices.
26
27    """
28
29    return nn.Sequential(
30        nn.Linear(input_size, 32),
31        nn.ReLU(),
32        nn.Linear(32, 1)
33    )

Create the neural network used for price prediction.

Parameters
  • input_size (int): Number of input features.
Returns
  • torch.nn.Module: Neural network for predicting automobile selling prices.
def train_model( model: torch.nn.modules.module.Module, train_loader: torch.utils.data.dataloader.DataLoader, epochs: int = 100, learning_rate: float = 0.001) -> torch.nn.modules.module.Module:
36def train_model(
37    model: nn.Module,
38    train_loader: DataLoader,
39    epochs: int = 100,
40    learning_rate: float = 0.001
41) -> nn.Module:
42
43    """Train the automobile price prediction model.
44
45    Parameters
46    ----------
47    model : torch.nn.Module
48        Neural network to train.
49
50    train_loader : torch.utils.data.DataLoader
51        DataLoader containing the training data.
52
53    epochs : int, default=100
54        Number of training epochs.
55
56    learning_rate : float, default=0.001
57        Learning rate used by the Adam optimizer.
58
59    Returns
60    -------
61    torch.nn.Module
62        The trained model.
63
64    """
65
66    loss_fn = nn.MSELoss()
67
68    optimizer = torch.optim.Adam(
69        model.parameters(),
70        lr=learning_rate
71    )
72
73    for epoch in range(epochs):
74
75        for X, y in train_loader:
76            prediction = model(X).squeeze()
77            loss = loss_fn(prediction, y)
78
79            optimizer.zero_grad()
80            loss.backward()
81            optimizer.step()
82
83        print(f"Epoch {epoch + 1}, Loss: {loss.item():.4f}")
84
85    return model

Train the automobile price prediction model.

Parameters
  • model (torch.nn.Module): Neural network to train.
  • train_loader (torch.utils.data.DataLoader): DataLoader containing the training data.
  • epochs (int, default=100): Number of training epochs.
  • learning_rate (float, default=0.001): Learning rate used by the Adam optimizer.
Returns
  • torch.nn.Module: The trained model.
def main():
 88def main():
 89    """Train the automobile price prediction model and save it to disk."""
 90
 91    PROCESSED_TRAIN_FILE = "data/processed/automobile_dataset"
 92    PROCESSED_TEST_FILE = "data/processed/automobile_test"
 93    MODEL_PATH = Path("models/automobile_model.pth")
 94
 95    MODEL_PATH.parent.mkdir(parents=True, exist_ok=True)
 96
 97    train_dataset = AutomobileDataset(
 98        f"{PROCESSED_TRAIN_FILE}.parquet"
 99    )
100
101    test_dataset = AutomobileDataset(
102        f"{PROCESSED_TEST_FILE}.parquet"
103    )
104
105    train_loader = DataLoader(
106        train_dataset,
107        batch_size=32,
108        shuffle=True
109    )
110
111    # The test loader is prepared here for later evaluation.
112    test_loader = DataLoader(
113        test_dataset,
114        batch_size=32,
115        shuffle=False
116    )
117
118    model = create_model(train_dataset.X.shape[1])
119
120    model = train_model(
121        model,
122        train_loader
123    )
124
125    torch.save(
126        model.state_dict(),
127        MODEL_PATH
128    )
129
130    print(f"Model saved to {MODEL_PATH}")

Train the automobile price prediction model and save it to disk.