Spaces:
Runtime error
Runtime error
Update core/train_eval.py
Browse files- core/train_eval.py +9 -3
core/train_eval.py
CHANGED
|
@@ -28,7 +28,7 @@ def mean_absolute_percentage_error(y_true, y_pred):
|
|
| 28 |
|
| 29 |
def train_and_evaluate(
|
| 30 |
df,
|
| 31 |
-
future_df,
|
| 32 |
model_cls,
|
| 33 |
horizon=1,
|
| 34 |
hidden=64,
|
|
@@ -77,7 +77,7 @@ def train_and_evaluate(
|
|
| 77 |
model = model_cls(input_size=input_dim, hidden_size=hidden, num_layers=layers, output_size=horizon, dropout=dropout).to(device)
|
| 78 |
optimizer = torch.optim.AdamW(model.parameters(), lr=lr, betas=(beta1, beta2), weight_decay=weight_decay)
|
| 79 |
loss_fn = nn.MSELoss()
|
| 80 |
-
scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', patience=5, factor=0.5, threshold=1e-4
|
| 81 |
|
| 82 |
train_losses = []
|
| 83 |
val_losses = []
|
|
@@ -85,6 +85,7 @@ def train_and_evaluate(
|
|
| 85 |
patience = 5
|
| 86 |
counter = 0
|
| 87 |
best_model_state = None
|
|
|
|
| 88 |
|
| 89 |
model.train()
|
| 90 |
for epoch in range(epochs):
|
|
@@ -110,10 +111,15 @@ def train_and_evaluate(
|
|
| 110 |
val_loss /= len(val_loader)
|
| 111 |
val_losses.append(val_loss)
|
| 112 |
|
|
|
|
| 113 |
scheduler.step(val_loss)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 114 |
|
| 115 |
if verbose and (epoch + 1) % 10 == 0:
|
| 116 |
-
print(f"Epoch {epoch+1}/{epochs} - Train Loss: {train_losses[-1]:.4f}, Val Loss: {val_losses[-1]:.4f}, LR: {
|
| 117 |
|
| 118 |
if val_loss < best_val_loss:
|
| 119 |
best_val_loss = val_loss
|
|
|
|
| 28 |
|
| 29 |
def train_and_evaluate(
|
| 30 |
df,
|
| 31 |
+
future_df,
|
| 32 |
model_cls,
|
| 33 |
horizon=1,
|
| 34 |
hidden=64,
|
|
|
|
| 77 |
model = model_cls(input_size=input_dim, hidden_size=hidden, num_layers=layers, output_size=horizon, dropout=dropout).to(device)
|
| 78 |
optimizer = torch.optim.AdamW(model.parameters(), lr=lr, betas=(beta1, beta2), weight_decay=weight_decay)
|
| 79 |
loss_fn = nn.MSELoss()
|
| 80 |
+
scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', patience=5, factor=0.5, threshold=1e-4)
|
| 81 |
|
| 82 |
train_losses = []
|
| 83 |
val_losses = []
|
|
|
|
| 85 |
patience = 5
|
| 86 |
counter = 0
|
| 87 |
best_model_state = None
|
| 88 |
+
last_lr = lr # Track learning rate for manual logging
|
| 89 |
|
| 90 |
model.train()
|
| 91 |
for epoch in range(epochs):
|
|
|
|
| 111 |
val_loss /= len(val_loader)
|
| 112 |
val_losses.append(val_loss)
|
| 113 |
|
| 114 |
+
# Step scheduler and manually log learning rate changes
|
| 115 |
scheduler.step(val_loss)
|
| 116 |
+
current_lr = optimizer.param_groups[0]['lr']
|
| 117 |
+
if current_lr != last_lr and verbose:
|
| 118 |
+
print(f"Epoch {epoch+1}: Learning rate reduced to {current_lr:.6f}")
|
| 119 |
+
last_lr = current_lr
|
| 120 |
|
| 121 |
if verbose and (epoch + 1) % 10 == 0:
|
| 122 |
+
print(f"Epoch {epoch+1}/{epochs} - Train Loss: {train_losses[-1]:.4f}, Val Loss: {val_losses[-1]:.4f}, LR: {current_lr:.6f}")
|
| 123 |
|
| 124 |
if val_loss < best_val_loss:
|
| 125 |
best_val_loss = val_loss
|