Learning rate selection in Computer Vision - ML Experiment: Train & Evaluate
import tensorflow as tf from tensorflow.keras import layers, models from tensorflow.keras.datasets import cifar10 from tensorflow.keras.utils import to_categorical # Load and preprocess data (X_train, y_train), (X_test, y_test) = cifar10.load_data() X_train, X_test = X_train / 255.0, X_test / 255.0 y_train_cat = to_categorical(y_train, 10) y_test_cat = to_categorical(y_test, 10) # Define CNN model model = models.Sequential([ layers.Conv2D(32, (3,3), activation='relu', input_shape=(32,32,3)), layers.MaxPooling2D((2,2)), layers.Conv2D(64, (3,3), activation='relu'), layers.MaxPooling2D((2,2)), layers.Conv2D(64, (3,3), activation='relu'), layers.Flatten(), layers.Dense(64, activation='relu'), layers.Dense(10, activation='softmax') ]) # Compile with improved learning rate model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), loss='categorical_crossentropy', metrics=['accuracy']) # Train model history = model.fit(X_train, y_train_cat, epochs=20, batch_size=64, validation_split=0.2, verbose=2) # Evaluate on test data test_loss, test_acc = model.evaluate(X_test, y_test_cat, verbose=0) print(f'Test accuracy: {test_acc:.2f}, Test loss: {test_loss:.2f}')
Before: Training accuracy 85%, Validation accuracy 70%, Validation loss 1.2
After: Training accuracy 90%, Validation accuracy 82%, Validation loss 0.75
Practice
What does the learning rate control in training a computer vision model?
Solution
Step 1: Understand the role of learning rate
The learning rate determines how much the model changes its weights after seeing each example.Step 2: Connect learning rate to model updates
A higher learning rate means faster updates, while a lower rate means slower updates.Final Answer:
How fast the model updates its knowledge -> Option CQuick Check:
Learning rate controls update speed = C [OK]
- Confusing learning rate with model size
- Thinking learning rate changes input data
- Mixing learning rate with activation functions
Which of the following is the correct way to set a learning rate of 0.01 using PyTorch's SGD optimizer?
import torch.optim as optim
optimizer = optim.SGD(model.parameters(), lr=___)Solution
Step 1: Check the expected type for learning rate
The learning rate parameter expects a float number, not a string or variable name.Step 2: Identify the correct float value for 0.01
Using 0.01 as a float sets the learning rate correctly.Final Answer:
0.01 -> Option AQuick Check:
Learning rate as float = 0.01 [OK]
- Using string "0.01" instead of float 0.01
- Passing undefined variable learning_rate
- Setting lr to 0.1 by mistake
Consider this training loop snippet for a vision model:
learning_rate = 0.5
for epoch in range(3):
loss = train_one_epoch(model, data, learning_rate)
print(f"Epoch {epoch+1} loss: {loss:.2f}")If the learning rate is too high, what is the most likely output behavior?
Solution
Step 1: Understand effect of high learning rate
A very high learning rate like 0.5 can cause the model to overshoot the best weights, making training unstable.Step 2: Predict loss behavior with unstable training
Loss will not steadily decrease but will jump up and down or increase.Final Answer:
Loss fluctuates or increases wildly -> Option DQuick Check:
High lr causes unstable loss = A [OK]
- Assuming loss always decreases regardless of lr
- Thinking loss becomes zero immediately
- Confusing constant loss with stable training
Given this code snippet, identify the error related to learning rate usage:
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
for epoch in range(5):
loss = train(model, data)
optimizer.step()
optimizer.zero_grad()Solution
Step 1: Check optimizer usage order
Before calling optimizer.step(), gradients must be computed by loss.backward().Step 2: Identify missing backward call
The code misses loss.backward(), so optimizer.step() updates without gradients.Final Answer:
optimizer.step() called before loss.backward() -> Option AQuick Check:
Missing loss.backward() before step = B [OK]
- Thinking learning rate 0.001 is too high for Adam
- Believing zero_grad() order is wrong here
- Assuming learning rate must change each epoch
You want to train a deep vision model on a new dataset. You start with a learning rate of 0.1 but notice training loss does not decrease. What is the best next step?
Solution
Step 1: Analyze why loss does not decrease
A high learning rate like 0.1 can cause the model to skip the best weights, preventing loss decrease.Step 2: Choose a safer learning rate adjustment
Lowering the learning rate to 0.01 allows smaller, stable updates to improve training.Final Answer:
Decrease the learning rate to 0.01 and try again -> Option BQuick Check:
Lower lr if loss stuck = D [OK]
- Increasing learning rate when training fails
- Ignoring learning rate and training longer
- Removing learning rate parameter entirely
Ready to prove it?
Pass the test and this pattern moves unknown
