Validation Set with Simple Python
We’ll simulate a mini neural network training with a validation check (without external libraries).
import random
# Step 1: Generate toy data
def generate_data(num_samples):
data = []
for _ in range(num_samples):
x = random.uniform(0, 10)
y = 2 * x + 3 # True function: y = 2x + 3
data.append((x, y))
return data
# Step 2: Split into train and validation sets
data = generate_data(100)
train_data = data[:80]
val_data = data[80:]
# Step 3: Initialize weights
w = random.uniform(0, 1)
b = random.uniform(0, 1)
lr = 0.001 # learning rate
# Step 4: Train the model
def train_epoch(data, w, b, lr):
for x, y in data:
y_pred = w * x + b
error = y_pred - y
# Gradient Descent
w -= lr * error * x
b -= lr * error
return w, b
# Step 5: Loss function (Mean Squared Error)
def evaluate(data, w, b):
total_error = 0
for x, y in data:
y_pred = w * x + b
total_error += (y - y_pred) ** 2
return total_error / len(data)
# Step 6: Training loop with validation check
for epoch in range(1, 101):
w, b = train_epoch(train_data, w, b, lr)
train_loss = evaluate(train_data, w, b)
val_loss = evaluate(val_data, w, b)
if epoch % 10 == 0:
print(f"Epoch {epoch}: Train Loss = {train_loss:.4f}, Validation Loss = {val_loss:.4f}")
Basic Observations
- Training Loss Decreases Quickly:
- Because the model adjusts weights to fit the training data well.
- Validation Loss Should Also Decrease (Initially):
- This means the model is learning generalized patterns.
- If Validation Loss Starts Increasing:
- It’s a sign of overfitting: the model is doing too well on training, but worse on new data.
- Stopping Training Early:
- When validation loss stops improving, we should stop training (a technique called early stopping).
Validation Set in Neural Network – Summary
