Skip to content

Commit c7f2a41

Browse files
author
sudkul
committed
adjust the training to use gpu, if available
1 parent 43d5e6f commit c7f2a41

2 files changed

Lines changed: 37 additions & 2 deletions

File tree

module-27-fairlearn/solution/train.py

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,16 @@
1111
from sklearn.model_selection import train_test_split
1212
from sklearn.neural_network import MLPClassifier
1313
from sklearn.preprocessing import LabelEncoder, StandardScaler
14+
import torch
15+
import torch.nn as nn
16+
from skorch import NeuralNetClassifier
17+
18+
device = "cuda" if torch.cuda.is_available() else "cpu"
19+
print(f"Using device: {device}") # should print: Using device: cuda
1420

1521
print("Loading dataset...")
16-
data = fetch_diabetes_hospital(as_frame=True)
22+
# data = fetch_diabetes_hospital(as_frame=True)
23+
data = fetch_diabetes_hospital(as_frame=True, cache=True)
1724
X, y = data.data, data.target
1825

1926
# TODO: Extract the sensitive feature (gender)
@@ -38,9 +45,36 @@
3845
scaler = StandardScaler()
3946
X_train = scaler.fit_transform(X_train)
4047
X_test = scaler.transform(X_test)
48+
X_train = X_train.astype(np.float32)
49+
X_test = X_test.astype(np.float32)
50+
y_train = y_train.astype(np.int64)
51+
52+
class MLP(nn.Module):
53+
def __init__(self, input_dim=24, output_dim=2):
54+
super().__init__()
55+
self.net = nn.Sequential(
56+
nn.Linear(input_dim, 64),
57+
nn.ReLU(),
58+
nn.Linear(64, 32),
59+
nn.ReLU(),
60+
nn.Linear(32, output_dim),
61+
)
62+
def forward(self, x):
63+
return self.net(x)
4164

4265
print("Training MLP...")
43-
model = MLPClassifier(hidden_layer_sizes=(64, 32), max_iter=100, random_state=42)
66+
# model = MLPClassifier(hidden_layer_sizes=(64, 32), max_iter=100, random_state=42)
67+
model = NeuralNetClassifier(
68+
MLP,
69+
module__input_dim=X_train.shape[1],
70+
module__output_dim=len(np.unique(y_train)),
71+
max_epochs=100,
72+
lr=0.001,
73+
batch_size=256, # larger batch = better GPU utilization
74+
device=device, # ← this line is what actually puts the model on the GPU/CPU
75+
train_split=None, # mirrors original — no internal val split
76+
verbose=1,
77+
)
4478
model.fit(X_train, y_train)
4579

4680
joblib.dump({"model": model, "scaler": scaler}, "model.joblib")

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,4 @@ shap>=0.44.0
5757
# NOTE: requires scikit-learn==1.8.0 — conflicts with module-15 (needs <1.4.0)
5858
# run in a separate virtual environment
5959
fairlearn>=0.10.0
60+
skorch==1.4.0

0 commit comments

Comments
 (0)