code files
Browse files- README.md +7 -0
- default.py +97 -0
- dog.png +0 -0
- gd-dog.jpg +0 -0
- imagenet-classes.txt +1000 -0
- inference.ipynb +295 -0
- mini.py +6 -0
- resnet-50-imagenet.ipynb +1 -0
README.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# ResNet-50 on ImageNet Mini
|
| 2 |
+
|
| 3 |
+
```
|
| 4 |
+
Dataset Link:
|
| 5 |
+
|
| 6 |
+
https://www.kaggle.com/datasets/ifigotin/imagenetmini-1000
|
| 7 |
+
```
|
default.py
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Load the ResNet50 model
|
| 2 |
+
def ResNet50(num_classes, channels=3):
|
| 3 |
+
return ResNet(Bottleneck, [3,4,6,3], num_classes, channels)
|
| 4 |
+
|
| 5 |
+
model = ResNet50(num_classes=1000)
|
| 6 |
+
|
| 7 |
+
# Parallelize training across multiple GPUs
|
| 8 |
+
# model = torch.nn.DataParallel(model)
|
| 9 |
+
|
| 10 |
+
# Set the model to run on the device
|
| 11 |
+
model = model.to(device)
|
| 12 |
+
|
| 13 |
+
# Define the loss function and optimizer
|
| 14 |
+
criterion = torch.nn.CrossEntropyLoss()
|
| 15 |
+
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
|
| 16 |
+
|
| 17 |
+
# Function to evaluate the model
|
| 18 |
+
def evaluate_model(model, val_loader, criterion):
|
| 19 |
+
model.eval()
|
| 20 |
+
val_loss = 0.0
|
| 21 |
+
correct = 0
|
| 22 |
+
total = 0
|
| 23 |
+
class_correct = [0] * len(val_dataset.classes)
|
| 24 |
+
class_total = [0] * len(val_dataset.classes)
|
| 25 |
+
|
| 26 |
+
with torch.no_grad():
|
| 27 |
+
for inputs, labels in tqdm(val_loader, desc="Validating"):
|
| 28 |
+
inputs, labels = inputs.to(device), labels.to(device)
|
| 29 |
+
|
| 30 |
+
outputs = model(inputs)
|
| 31 |
+
loss = criterion(outputs, labels)
|
| 32 |
+
val_loss += loss.item()
|
| 33 |
+
|
| 34 |
+
_, predicted = torch.max(outputs, 1)
|
| 35 |
+
correct += (predicted == labels).sum().item()
|
| 36 |
+
total += labels.size(0)
|
| 37 |
+
|
| 38 |
+
for i in range(len(labels)):
|
| 39 |
+
label = labels[i]
|
| 40 |
+
class_correct[label] += (predicted[i] == label).item()
|
| 41 |
+
class_total[label] += 1
|
| 42 |
+
|
| 43 |
+
val_loss /= len(val_loader)
|
| 44 |
+
accuracy = 100.0 * correct / total
|
| 45 |
+
per_class_accuracy = {
|
| 46 |
+
val_dataset.classes[i]: 100.0 * class_correct[i] / class_total[i]
|
| 47 |
+
for i in range(len(val_dataset.classes))
|
| 48 |
+
if class_total[i] > 0
|
| 49 |
+
}
|
| 50 |
+
return val_loss, accuracy, per_class_accuracy
|
| 51 |
+
|
| 52 |
+
# Train the model
|
| 53 |
+
print(f'Training the model on ImageNet')
|
| 54 |
+
for epoch in range(num_epochs):
|
| 55 |
+
model.train()
|
| 56 |
+
running_loss = 0.0
|
| 57 |
+
correct = 0
|
| 58 |
+
total = 0
|
| 59 |
+
|
| 60 |
+
for inputs, labels in tqdm(train_loader, desc=f"Epoch {epoch+1}/{num_epochs}"):
|
| 61 |
+
inputs, labels = inputs.to(device), labels.to(device)
|
| 62 |
+
|
| 63 |
+
# Zero out the optimizer
|
| 64 |
+
optimizer.zero_grad()
|
| 65 |
+
|
| 66 |
+
# Forward pass
|
| 67 |
+
outputs = model(inputs)
|
| 68 |
+
loss = criterion(outputs, labels)
|
| 69 |
+
|
| 70 |
+
# Backward pass
|
| 71 |
+
loss.backward()
|
| 72 |
+
optimizer.step()
|
| 73 |
+
|
| 74 |
+
running_loss += loss.item()
|
| 75 |
+
|
| 76 |
+
# Calculate accuracy during training
|
| 77 |
+
_, predicted = torch.max(outputs, 1)
|
| 78 |
+
correct += (predicted == labels).sum().item()
|
| 79 |
+
total += labels.size(0)
|
| 80 |
+
|
| 81 |
+
# Average loss and accuracy for the epoch
|
| 82 |
+
train_loss = running_loss / len(train_loader)
|
| 83 |
+
train_accuracy = 100.0 * correct / total
|
| 84 |
+
|
| 85 |
+
print(f"Epoch {epoch+1}/{num_epochs} - Training Loss: {train_loss:.4f}, Training Accuracy: {train_accuracy:.2f}%")
|
| 86 |
+
|
| 87 |
+
# Run validation after all epochs
|
| 88 |
+
print(f"Validating the model on unseen data after training...")
|
| 89 |
+
val_loss, val_accuracy, per_class_accuracy = evaluate_model(model, val_loader, criterion)
|
| 90 |
+
print(f"Validation Loss: {val_loss:.4f}, Validation Accuracy: {val_accuracy:.2f}%")
|
| 91 |
+
print("Per-class Accuracy:")
|
| 92 |
+
for class_name, acc in per_class_accuracy.items():
|
| 93 |
+
print(f"{class_name}: {acc:.2f}%")
|
| 94 |
+
|
| 95 |
+
# Save the model at the end of training
|
| 96 |
+
torch.save(model.state_dict(), "resnet50_imagenet.pth")
|
| 97 |
+
print("Model saved as resnet50_imagenet_last_epoch.pth")
|
dog.png
ADDED
|
gd-dog.jpg
ADDED
|
imagenet-classes.txt
ADDED
|
@@ -0,0 +1,1000 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
tench, Tinca tinca
|
| 2 |
+
goldfish, Carassius auratus
|
| 3 |
+
great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias
|
| 4 |
+
tiger shark, Galeocerdo cuvieri
|
| 5 |
+
hammerhead, hammerhead shark
|
| 6 |
+
electric ray, crampfish, numbfish, torpedo
|
| 7 |
+
stingray
|
| 8 |
+
cock
|
| 9 |
+
hen
|
| 10 |
+
ostrich, Struthio camelus
|
| 11 |
+
brambling, Fringilla montifringilla
|
| 12 |
+
goldfinch, Carduelis carduelis
|
| 13 |
+
house finch, linnet, Carpodacus mexicanus
|
| 14 |
+
junco, snowbird
|
| 15 |
+
indigo bunting, indigo finch, indigo bird, Passerina cyanea
|
| 16 |
+
robin, American robin, Turdus migratorius
|
| 17 |
+
bulbul
|
| 18 |
+
jay
|
| 19 |
+
magpie
|
| 20 |
+
chickadee
|
| 21 |
+
water ouzel, dipper
|
| 22 |
+
kite
|
| 23 |
+
bald eagle, American eagle, Haliaeetus leucocephalus
|
| 24 |
+
vulture
|
| 25 |
+
great grey owl, great gray owl, Strix nebulosa
|
| 26 |
+
European fire salamander, Salamandra salamandra
|
| 27 |
+
common newt, Triturus vulgaris
|
| 28 |
+
eft
|
| 29 |
+
spotted salamander, Ambystoma maculatum
|
| 30 |
+
axolotl, mud puppy, Ambystoma mexicanum
|
| 31 |
+
bullfrog, Rana catesbeiana
|
| 32 |
+
tree frog, tree-frog
|
| 33 |
+
tailed frog, bell toad, ribbed toad, tailed toad, Ascaphus trui
|
| 34 |
+
loggerhead, loggerhead turtle, Caretta caretta
|
| 35 |
+
leatherback turtle, leatherback, leathery turtle, Dermochelys coriacea
|
| 36 |
+
mud turtle
|
| 37 |
+
terrapin
|
| 38 |
+
box turtle, box tortoise
|
| 39 |
+
banded gecko
|
| 40 |
+
common iguana, iguana, Iguana iguana
|
| 41 |
+
American chameleon, anole, Anolis carolinensis
|
| 42 |
+
whiptail, whiptail lizard
|
| 43 |
+
agama
|
| 44 |
+
frilled lizard, Chlamydosaurus kingi
|
| 45 |
+
alligator lizard
|
| 46 |
+
Gila monster, Heloderma suspectum
|
| 47 |
+
green lizard, Lacerta viridis
|
| 48 |
+
African chameleon, Chamaeleo chamaeleon
|
| 49 |
+
Komodo dragon, Komodo lizard, dragon lizard, giant lizard, Varanus komodoensis
|
| 50 |
+
African crocodile, Nile crocodile, Crocodylus niloticus
|
| 51 |
+
American alligator, Alligator mississipiensis
|
| 52 |
+
triceratops
|
| 53 |
+
thunder snake, worm snake, Carphophis amoenus
|
| 54 |
+
ringneck snake, ring-necked snake, ring snake
|
| 55 |
+
hognose snake, puff adder, sand viper
|
| 56 |
+
green snake, grass snake
|
| 57 |
+
king snake, kingsnake
|
| 58 |
+
garter snake, grass snake
|
| 59 |
+
water snake
|
| 60 |
+
vine snake
|
| 61 |
+
night snake, Hypsiglena torquata
|
| 62 |
+
boa constrictor, Constrictor constrictor
|
| 63 |
+
rock python, rock snake, Python sebae
|
| 64 |
+
Indian cobra, Naja naja
|
| 65 |
+
green mamba
|
| 66 |
+
sea snake
|
| 67 |
+
horned viper, cerastes, sand viper, horned asp, Cerastes cornutus
|
| 68 |
+
diamondback, diamondback rattlesnake, Crotalus adamanteus
|
| 69 |
+
sidewinder, horned rattlesnake, Crotalus cerastes
|
| 70 |
+
trilobite
|
| 71 |
+
harvestman, daddy longlegs, Phalangium opilio
|
| 72 |
+
scorpion
|
| 73 |
+
black and gold garden spider, Argiope aurantia
|
| 74 |
+
barn spider, Araneus cavaticus
|
| 75 |
+
garden spider, Aranea diademata
|
| 76 |
+
black widow, Latrodectus mactans
|
| 77 |
+
tarantula
|
| 78 |
+
wolf spider, hunting spider
|
| 79 |
+
tick
|
| 80 |
+
centipede
|
| 81 |
+
black grouse
|
| 82 |
+
ptarmigan
|
| 83 |
+
ruffed grouse, partridge, Bonasa umbellus
|
| 84 |
+
prairie chicken, prairie grouse, prairie fowl
|
| 85 |
+
peacock
|
| 86 |
+
quail
|
| 87 |
+
partridge
|
| 88 |
+
African grey, African gray, Psittacus erithacus
|
| 89 |
+
macaw
|
| 90 |
+
sulphur-crested cockatoo, Kakatoe galerita, Cacatua galerita
|
| 91 |
+
lorikeet
|
| 92 |
+
coucal
|
| 93 |
+
bee eater
|
| 94 |
+
hornbill
|
| 95 |
+
hummingbird
|
| 96 |
+
jacamar
|
| 97 |
+
toucan
|
| 98 |
+
drake
|
| 99 |
+
red-breasted merganser, Mergus serrator
|
| 100 |
+
goose
|
| 101 |
+
black swan, Cygnus atratus
|
| 102 |
+
tusker
|
| 103 |
+
echidna, spiny anteater, anteater
|
| 104 |
+
platypus, duckbill, duckbilled platypus, duck-billed platypus, Ornithorhynchus anatinus
|
| 105 |
+
wallaby, brush kangaroo
|
| 106 |
+
koala, koala bear, kangaroo bear, native bear, Phascolarctos cinereus
|
| 107 |
+
wombat
|
| 108 |
+
jellyfish
|
| 109 |
+
sea anemone, anemone
|
| 110 |
+
brain coral
|
| 111 |
+
flatworm, platyhelminth
|
| 112 |
+
nematode, nematode worm, roundworm
|
| 113 |
+
conch
|
| 114 |
+
snail
|
| 115 |
+
slug
|
| 116 |
+
sea slug, nudibranch
|
| 117 |
+
chiton, coat-of-mail shell, sea cradle, polyplacophore
|
| 118 |
+
chambered nautilus, pearly nautilus, nautilus
|
| 119 |
+
Dungeness crab, Cancer magister
|
| 120 |
+
rock crab, Cancer irroratus
|
| 121 |
+
fiddler crab
|
| 122 |
+
king crab, Alaska crab, Alaskan king crab, Alaska king crab, Paralithodes camtschatica
|
| 123 |
+
American lobster, Northern lobster, Maine lobster, Homarus americanus
|
| 124 |
+
spiny lobster, langouste, rock lobster, crawfish, crayfish, sea crawfish
|
| 125 |
+
crayfish, crawfish, crawdad, crawdaddy
|
| 126 |
+
hermit crab
|
| 127 |
+
isopod
|
| 128 |
+
white stork, Ciconia ciconia
|
| 129 |
+
black stork, Ciconia nigra
|
| 130 |
+
spoonbill
|
| 131 |
+
flamingo
|
| 132 |
+
little blue heron, Egretta caerulea
|
| 133 |
+
American egret, great white heron, Egretta albus
|
| 134 |
+
bittern
|
| 135 |
+
crane
|
| 136 |
+
limpkin, Aramus pictus
|
| 137 |
+
European gallinule, Porphyrio porphyrio
|
| 138 |
+
American coot, marsh hen, mud hen, water hen, Fulica americana
|
| 139 |
+
bustard
|
| 140 |
+
ruddy turnstone, Arenaria interpres
|
| 141 |
+
red-backed sandpiper, dunlin, Erolia alpina
|
| 142 |
+
redshank, Tringa totanus
|
| 143 |
+
dowitcher
|
| 144 |
+
oystercatcher, oyster catcher
|
| 145 |
+
pelican
|
| 146 |
+
king penguin, Aptenodytes patagonica
|
| 147 |
+
albatross, mollymawk
|
| 148 |
+
grey whale, gray whale, devilfish, Eschrichtius gibbosus, Eschrichtius robustus
|
| 149 |
+
killer whale, killer, orca, grampus, sea wolf, Orcinus orca
|
| 150 |
+
dugong, Dugong dugon
|
| 151 |
+
sea lion
|
| 152 |
+
Chihuahua
|
| 153 |
+
Japanese spaniel
|
| 154 |
+
Maltese dog, Maltese terrier, Maltese
|
| 155 |
+
Pekinese, Pekingese, Peke
|
| 156 |
+
Shih-Tzu
|
| 157 |
+
Blenheim spaniel
|
| 158 |
+
papillon
|
| 159 |
+
toy terrier
|
| 160 |
+
Rhodesian ridgeback
|
| 161 |
+
Afghan hound, Afghan
|
| 162 |
+
basset, basset hound
|
| 163 |
+
beagle
|
| 164 |
+
bloodhound, sleuthhound
|
| 165 |
+
bluetick
|
| 166 |
+
black-and-tan coonhound
|
| 167 |
+
Walker hound, Walker foxhound
|
| 168 |
+
English foxhound
|
| 169 |
+
redbone
|
| 170 |
+
borzoi, Russian wolfhound
|
| 171 |
+
Irish wolfhound
|
| 172 |
+
Italian greyhound
|
| 173 |
+
whippet
|
| 174 |
+
Ibizan hound, Ibizan Podenco
|
| 175 |
+
Norwegian elkhound, elkhound
|
| 176 |
+
otterhound, otter hound
|
| 177 |
+
Saluki, gazelle hound
|
| 178 |
+
Scottish deerhound, deerhound
|
| 179 |
+
Weimaraner
|
| 180 |
+
Staffordshire bullterrier, Staffordshire bull terrier
|
| 181 |
+
American Staffordshire terrier, Staffordshire terrier, American pit bull terrier, pit bull terrier
|
| 182 |
+
Bedlington terrier
|
| 183 |
+
Border terrier
|
| 184 |
+
Kerry blue terrier
|
| 185 |
+
Irish terrier
|
| 186 |
+
Norfolk terrier
|
| 187 |
+
Norwich terrier
|
| 188 |
+
Yorkshire terrier
|
| 189 |
+
wire-haired fox terrier
|
| 190 |
+
Lakeland terrier
|
| 191 |
+
Sealyham terrier, Sealyham
|
| 192 |
+
Airedale, Airedale terrier
|
| 193 |
+
cairn, cairn terrier
|
| 194 |
+
Australian terrier
|
| 195 |
+
Dandie Dinmont, Dandie Dinmont terrier
|
| 196 |
+
Boston bull, Boston terrier
|
| 197 |
+
miniature schnauzer
|
| 198 |
+
giant schnauzer
|
| 199 |
+
standard schnauzer
|
| 200 |
+
Scotch terrier, Scottish terrier, Scottie
|
| 201 |
+
Tibetan terrier, chrysanthemum dog
|
| 202 |
+
silky terrier, Sydney silky
|
| 203 |
+
soft-coated wheaten terrier
|
| 204 |
+
West Highland white terrier
|
| 205 |
+
Lhasa, Lhasa apso
|
| 206 |
+
flat-coated retriever
|
| 207 |
+
curly-coated retriever
|
| 208 |
+
golden retriever
|
| 209 |
+
Labrador retriever
|
| 210 |
+
Chesapeake Bay retriever
|
| 211 |
+
German short-haired pointer
|
| 212 |
+
vizsla, Hungarian pointer
|
| 213 |
+
English setter
|
| 214 |
+
Irish setter, red setter
|
| 215 |
+
Gordon setter
|
| 216 |
+
Brittany spaniel
|
| 217 |
+
clumber, clumber spaniel
|
| 218 |
+
English springer, English springer spaniel
|
| 219 |
+
Welsh springer spaniel
|
| 220 |
+
cocker spaniel, English cocker spaniel, cocker
|
| 221 |
+
Sussex spaniel
|
| 222 |
+
Irish water spaniel
|
| 223 |
+
kuvasz
|
| 224 |
+
schipperke
|
| 225 |
+
groenendael
|
| 226 |
+
malinois
|
| 227 |
+
briard
|
| 228 |
+
kelpie
|
| 229 |
+
komondor
|
| 230 |
+
Old English sheepdog, bobtail
|
| 231 |
+
Shetland sheepdog, Shetland sheep dog, Shetland
|
| 232 |
+
collie
|
| 233 |
+
Border collie
|
| 234 |
+
Bouvier des Flandres, Bouviers des Flandres
|
| 235 |
+
Rottweiler
|
| 236 |
+
German shepherd, German shepherd dog, German police dog, alsatian
|
| 237 |
+
Doberman, Doberman pinscher
|
| 238 |
+
miniature pinscher
|
| 239 |
+
Greater Swiss Mountain dog
|
| 240 |
+
Bernese mountain dog
|
| 241 |
+
Appenzeller
|
| 242 |
+
EntleBucher
|
| 243 |
+
boxer
|
| 244 |
+
bull mastiff
|
| 245 |
+
Tibetan mastiff
|
| 246 |
+
French bulldog
|
| 247 |
+
Great Dane
|
| 248 |
+
Saint Bernard, St Bernard
|
| 249 |
+
Eskimo dog, husky
|
| 250 |
+
malamute, malemute, Alaskan malamute
|
| 251 |
+
Siberian husky
|
| 252 |
+
dalmatian, coach dog, carriage dog
|
| 253 |
+
affenpinscher, monkey pinscher, monkey dog
|
| 254 |
+
basenji
|
| 255 |
+
pug, pug-dog
|
| 256 |
+
Leonberg
|
| 257 |
+
Newfoundland, Newfoundland dog
|
| 258 |
+
Great Pyrenees
|
| 259 |
+
Samoyed, Samoyede
|
| 260 |
+
Pomeranian
|
| 261 |
+
chow, chow chow
|
| 262 |
+
keeshond
|
| 263 |
+
Brabancon griffon
|
| 264 |
+
Pembroke, Pembroke Welsh corgi
|
| 265 |
+
Cardigan, Cardigan Welsh corgi
|
| 266 |
+
toy poodle
|
| 267 |
+
miniature poodle
|
| 268 |
+
standard poodle
|
| 269 |
+
Mexican hairless
|
| 270 |
+
timber wolf, grey wolf, gray wolf, Canis lupus
|
| 271 |
+
white wolf, Arctic wolf, Canis lupus tundrarum
|
| 272 |
+
red wolf, maned wolf, Canis rufus, Canis niger
|
| 273 |
+
coyote, prairie wolf, brush wolf, Canis latrans
|
| 274 |
+
dingo, warrigal, warragal, Canis dingo
|
| 275 |
+
dhole, Cuon alpinus
|
| 276 |
+
African hunting dog, hyena dog, Cape hunting dog, Lycaon pictus
|
| 277 |
+
hyena, hyaena
|
| 278 |
+
red fox, Vulpes vulpes
|
| 279 |
+
kit fox, Vulpes macrotis
|
| 280 |
+
Arctic fox, white fox, Alopex lagopus
|
| 281 |
+
grey fox, gray fox, Urocyon cinereoargenteus
|
| 282 |
+
tabby, tabby cat
|
| 283 |
+
tiger cat
|
| 284 |
+
Persian cat
|
| 285 |
+
Siamese cat, Siamese
|
| 286 |
+
Egyptian cat
|
| 287 |
+
cougar, puma, catamount, mountain lion, painter, panther, Felis concolor
|
| 288 |
+
lynx, catamount
|
| 289 |
+
leopard, Panthera pardus
|
| 290 |
+
snow leopard, ounce, Panthera uncia
|
| 291 |
+
jaguar, panther, Panthera onca, Felis onca
|
| 292 |
+
lion, king of beasts, Panthera leo
|
| 293 |
+
tiger, Panthera tigris
|
| 294 |
+
cheetah, chetah, Acinonyx jubatus
|
| 295 |
+
brown bear, bruin, Ursus arctos
|
| 296 |
+
American black bear, black bear, Ursus americanus, Euarctos americanus
|
| 297 |
+
ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus
|
| 298 |
+
sloth bear, Melursus ursinus, Ursus ursinus
|
| 299 |
+
mongoose
|
| 300 |
+
meerkat, mierkat
|
| 301 |
+
tiger beetle
|
| 302 |
+
ladybug, ladybeetle, lady beetle, ladybird, ladybird beetle
|
| 303 |
+
ground beetle, carabid beetle
|
| 304 |
+
long-horned beetle, longicorn, longicorn beetle
|
| 305 |
+
leaf beetle, chrysomelid
|
| 306 |
+
dung beetle
|
| 307 |
+
rhinoceros beetle
|
| 308 |
+
weevil
|
| 309 |
+
fly
|
| 310 |
+
bee
|
| 311 |
+
ant, emmet, pismire
|
| 312 |
+
grasshopper, hopper
|
| 313 |
+
cricket
|
| 314 |
+
walking stick, walkingstick, stick insect
|
| 315 |
+
cockroach, roach
|
| 316 |
+
mantis, mantid
|
| 317 |
+
cicada, cicala
|
| 318 |
+
leafhopper
|
| 319 |
+
lacewing, lacewing fly
|
| 320 |
+
dragonfly, darning needle, devil's darning needle, sewing needle, snake feeder, snake doctor, mosquito hawk, skeeter hawk
|
| 321 |
+
damselfly
|
| 322 |
+
admiral
|
| 323 |
+
ringlet, ringlet butterfly
|
| 324 |
+
monarch, monarch butterfly, milkweed butterfly, Danaus plexippus
|
| 325 |
+
cabbage butterfly
|
| 326 |
+
sulphur butterfly, sulfur butterfly
|
| 327 |
+
lycaenid, lycaenid butterfly
|
| 328 |
+
starfish, sea star
|
| 329 |
+
sea urchin
|
| 330 |
+
sea cucumber, holothurian
|
| 331 |
+
wood rabbit, cottontail, cottontail rabbit
|
| 332 |
+
hare
|
| 333 |
+
Angora, Angora rabbit
|
| 334 |
+
hamster
|
| 335 |
+
porcupine, hedgehog
|
| 336 |
+
fox squirrel, eastern fox squirrel, Sciurus niger
|
| 337 |
+
marmot
|
| 338 |
+
beaver
|
| 339 |
+
guinea pig, Cavia cobaya
|
| 340 |
+
sorrel
|
| 341 |
+
zebra
|
| 342 |
+
hog, pig, grunter, squealer, Sus scrofa
|
| 343 |
+
wild boar, boar, Sus scrofa
|
| 344 |
+
warthog
|
| 345 |
+
hippopotamus, hippo, river horse, Hippopotamus amphibius
|
| 346 |
+
ox
|
| 347 |
+
water buffalo, water ox, Asiatic buffalo, Bubalus bubalis
|
| 348 |
+
bison
|
| 349 |
+
ram, tup
|
| 350 |
+
bighorn, bighorn sheep, cimarron, Rocky Mountain bighorn, Rocky Mountain sheep, Ovis canadensis
|
| 351 |
+
ibex, Capra ibex
|
| 352 |
+
hartebeest
|
| 353 |
+
impala, Aepyceros melampus
|
| 354 |
+
gazelle
|
| 355 |
+
Arabian camel, dromedary, Camelus dromedarius
|
| 356 |
+
llama
|
| 357 |
+
weasel
|
| 358 |
+
mink
|
| 359 |
+
polecat, fitch, foulmart, foumart, Mustela putorius
|
| 360 |
+
black-footed ferret, ferret, Mustela nigripes
|
| 361 |
+
otter
|
| 362 |
+
skunk, polecat, wood pussy
|
| 363 |
+
badger
|
| 364 |
+
armadillo
|
| 365 |
+
three-toed sloth, ai, Bradypus tridactylus
|
| 366 |
+
orangutan, orang, orangutang, Pongo pygmaeus
|
| 367 |
+
gorilla, Gorilla gorilla
|
| 368 |
+
chimpanzee, chimp, Pan troglodytes
|
| 369 |
+
gibbon, Hylobates lar
|
| 370 |
+
siamang, Hylobates syndactylus, Symphalangus syndactylus
|
| 371 |
+
guenon, guenon monkey
|
| 372 |
+
patas, hussar monkey, Erythrocebus patas
|
| 373 |
+
baboon
|
| 374 |
+
macaque
|
| 375 |
+
langur
|
| 376 |
+
colobus, colobus monkey
|
| 377 |
+
proboscis monkey, Nasalis larvatus
|
| 378 |
+
marmoset
|
| 379 |
+
capuchin, ringtail, Cebus capucinus
|
| 380 |
+
howler monkey, howler
|
| 381 |
+
titi, titi monkey
|
| 382 |
+
spider monkey, Ateles geoffroyi
|
| 383 |
+
squirrel monkey, Saimiri sciureus
|
| 384 |
+
Madagascar cat, ring-tailed lemur, Lemur catta
|
| 385 |
+
indri, indris, Indri indri, Indri brevicaudatus
|
| 386 |
+
Indian elephant, Elephas maximus
|
| 387 |
+
African elephant, Loxodonta africana
|
| 388 |
+
lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens
|
| 389 |
+
giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca
|
| 390 |
+
barracouta, snoek
|
| 391 |
+
eel
|
| 392 |
+
coho, cohoe, coho salmon, blue jack, silver salmon, Oncorhynchus kisutch
|
| 393 |
+
rock beauty, Holocanthus tricolor
|
| 394 |
+
anemone fish
|
| 395 |
+
sturgeon
|
| 396 |
+
gar, garfish, garpike, billfish, Lepisosteus osseus
|
| 397 |
+
lionfish
|
| 398 |
+
puffer, pufferfish, blowfish, globefish
|
| 399 |
+
abacus
|
| 400 |
+
abaya
|
| 401 |
+
academic gown, academic robe, judge's robe
|
| 402 |
+
accordion, piano accordion, squeeze box
|
| 403 |
+
acoustic guitar
|
| 404 |
+
aircraft carrier, carrier, flattop, attack aircraft carrier
|
| 405 |
+
airliner
|
| 406 |
+
airship, dirigible
|
| 407 |
+
altar
|
| 408 |
+
ambulance
|
| 409 |
+
amphibian, amphibious vehicle
|
| 410 |
+
analog clock
|
| 411 |
+
apiary, bee house
|
| 412 |
+
apron
|
| 413 |
+
ashcan, trash can, garbage can, wastebin, ash bin, ash-bin, ashbin, dustbin, trash barrel, trash bin
|
| 414 |
+
assault rifle, assault gun
|
| 415 |
+
backpack, back pack, knapsack, packsack, rucksack, haversack
|
| 416 |
+
bakery, bakeshop, bakehouse
|
| 417 |
+
balance beam, beam
|
| 418 |
+
balloon
|
| 419 |
+
ballpoint, ballpoint pen, ballpen, Biro
|
| 420 |
+
Band Aid
|
| 421 |
+
banjo
|
| 422 |
+
bannister, banister, balustrade, balusters, handrail
|
| 423 |
+
barbell
|
| 424 |
+
barber chair
|
| 425 |
+
barbershop
|
| 426 |
+
barn
|
| 427 |
+
barometer
|
| 428 |
+
barrel, cask
|
| 429 |
+
barrow, garden cart, lawn cart, wheelbarrow
|
| 430 |
+
baseball
|
| 431 |
+
basketball
|
| 432 |
+
bassinet
|
| 433 |
+
bassoon
|
| 434 |
+
bathing cap, swimming cap
|
| 435 |
+
bath towel
|
| 436 |
+
bathtub, bathing tub, bath, tub
|
| 437 |
+
beach wagon, station wagon, wagon, estate car, beach waggon, station waggon, waggon
|
| 438 |
+
beacon, lighthouse, beacon light, pharos
|
| 439 |
+
beaker
|
| 440 |
+
bearskin, busby, shako
|
| 441 |
+
beer bottle
|
| 442 |
+
beer glass
|
| 443 |
+
bell cote, bell cot
|
| 444 |
+
bib
|
| 445 |
+
bicycle-built-for-two, tandem bicycle, tandem
|
| 446 |
+
bikini, two-piece
|
| 447 |
+
binder, ring-binder
|
| 448 |
+
binoculars, field glasses, opera glasses
|
| 449 |
+
birdhouse
|
| 450 |
+
boathouse
|
| 451 |
+
bobsled, bobsleigh, bob
|
| 452 |
+
bolo tie, bolo, bola tie, bola
|
| 453 |
+
bonnet, poke bonnet
|
| 454 |
+
bookcase
|
| 455 |
+
bookshop, bookstore, bookstall
|
| 456 |
+
bottlecap
|
| 457 |
+
bow
|
| 458 |
+
bow tie, bow-tie, bowtie
|
| 459 |
+
brass, memorial tablet, plaque
|
| 460 |
+
brassiere, bra, bandeau
|
| 461 |
+
breakwater, groin, groyne, mole, bulwark, seawall, jetty
|
| 462 |
+
breastplate, aegis, egis
|
| 463 |
+
broom
|
| 464 |
+
bucket, pail
|
| 465 |
+
buckle
|
| 466 |
+
bulletproof vest
|
| 467 |
+
bullet train, bullet
|
| 468 |
+
butcher shop, meat market
|
| 469 |
+
cab, hack, taxi, taxicab
|
| 470 |
+
caldron, cauldron
|
| 471 |
+
candle, taper, wax light
|
| 472 |
+
cannon
|
| 473 |
+
canoe
|
| 474 |
+
can opener, tin opener
|
| 475 |
+
cardigan
|
| 476 |
+
car mirror
|
| 477 |
+
carousel, carrousel, merry-go-round, roundabout, whirligig
|
| 478 |
+
carpenter's kit, tool kit
|
| 479 |
+
carton
|
| 480 |
+
car wheel
|
| 481 |
+
cash machine, cash dispenser, automated teller machine, automatic teller machine, automated teller, automatic teller, ATM
|
| 482 |
+
cassette
|
| 483 |
+
cassette player
|
| 484 |
+
castle
|
| 485 |
+
catamaran
|
| 486 |
+
CD player
|
| 487 |
+
cello, violoncello
|
| 488 |
+
cellular telephone, cellular phone, cellphone, cell, mobile phone
|
| 489 |
+
chain
|
| 490 |
+
chainlink fence
|
| 491 |
+
chain mail, ring mail, mail, chain armor, chain armour, ring armor, ring armour
|
| 492 |
+
chain saw, chainsaw
|
| 493 |
+
chest
|
| 494 |
+
chiffonier, commode
|
| 495 |
+
chime, bell, gong
|
| 496 |
+
china cabinet, china closet
|
| 497 |
+
Christmas stocking
|
| 498 |
+
church, church building
|
| 499 |
+
cinema, movie theater, movie theatre, movie house, picture palace
|
| 500 |
+
cleaver, meat cleaver, chopper
|
| 501 |
+
cliff dwelling
|
| 502 |
+
cloak
|
| 503 |
+
clog, geta, patten, sabot
|
| 504 |
+
cocktail shaker
|
| 505 |
+
coffee mug
|
| 506 |
+
coffeepot
|
| 507 |
+
coil, spiral, volute, whorl, helix
|
| 508 |
+
combination lock
|
| 509 |
+
computer keyboard, keypad
|
| 510 |
+
confectionery, confectionary, candy store
|
| 511 |
+
container ship, containership, container vessel
|
| 512 |
+
convertible
|
| 513 |
+
corkscrew, bottle screw
|
| 514 |
+
cornet, horn, trumpet, trump
|
| 515 |
+
cowboy boot
|
| 516 |
+
cowboy hat, ten-gallon hat
|
| 517 |
+
cradle
|
| 518 |
+
crane
|
| 519 |
+
crash helmet
|
| 520 |
+
crate
|
| 521 |
+
crib, cot
|
| 522 |
+
Crock Pot
|
| 523 |
+
croquet ball
|
| 524 |
+
crutch
|
| 525 |
+
cuirass
|
| 526 |
+
dam, dike, dyke
|
| 527 |
+
desk
|
| 528 |
+
desktop computer
|
| 529 |
+
dial telephone, dial phone
|
| 530 |
+
diaper, nappy, napkin
|
| 531 |
+
digital clock
|
| 532 |
+
digital watch
|
| 533 |
+
dining table, board
|
| 534 |
+
dishrag, dishcloth
|
| 535 |
+
dishwasher, dish washer, dishwashing machine
|
| 536 |
+
disk brake, disc brake
|
| 537 |
+
dock, dockage, docking facility
|
| 538 |
+
dogsled, dog sled, dog sleigh
|
| 539 |
+
dome
|
| 540 |
+
doormat, welcome mat
|
| 541 |
+
drilling platform, offshore rig
|
| 542 |
+
drum, membranophone, tympan
|
| 543 |
+
drumstick
|
| 544 |
+
dumbbell
|
| 545 |
+
Dutch oven
|
| 546 |
+
electric fan, blower
|
| 547 |
+
electric guitar
|
| 548 |
+
electric locomotive
|
| 549 |
+
entertainment center
|
| 550 |
+
envelope
|
| 551 |
+
espresso maker
|
| 552 |
+
face powder
|
| 553 |
+
feather boa, boa
|
| 554 |
+
file, file cabinet, filing cabinet
|
| 555 |
+
fireboat
|
| 556 |
+
fire engine, fire truck
|
| 557 |
+
fire screen, fireguard
|
| 558 |
+
flagpole, flagstaff
|
| 559 |
+
flute, transverse flute
|
| 560 |
+
folding chair
|
| 561 |
+
football helmet
|
| 562 |
+
forklift
|
| 563 |
+
fountain
|
| 564 |
+
fountain pen
|
| 565 |
+
four-poster
|
| 566 |
+
freight car
|
| 567 |
+
French horn, horn
|
| 568 |
+
frying pan, frypan, skillet
|
| 569 |
+
fur coat
|
| 570 |
+
garbage truck, dustcart
|
| 571 |
+
gasmask, respirator, gas helmet
|
| 572 |
+
gas pump, gasoline pump, petrol pump, island dispenser
|
| 573 |
+
goblet
|
| 574 |
+
go-kart
|
| 575 |
+
golf ball
|
| 576 |
+
golfcart, golf cart
|
| 577 |
+
gondola
|
| 578 |
+
gong, tam-tam
|
| 579 |
+
gown
|
| 580 |
+
grand piano, grand
|
| 581 |
+
greenhouse, nursery, glasshouse
|
| 582 |
+
grille, radiator grille
|
| 583 |
+
grocery store, grocery, food market, market
|
| 584 |
+
guillotine
|
| 585 |
+
hair slide
|
| 586 |
+
hair spray
|
| 587 |
+
half track
|
| 588 |
+
hammer
|
| 589 |
+
hamper
|
| 590 |
+
hand blower, blow dryer, blow drier, hair dryer, hair drier
|
| 591 |
+
hand-held computer, hand-held microcomputer
|
| 592 |
+
handkerchief, hankie, hanky, hankey
|
| 593 |
+
hard disc, hard disk, fixed disk
|
| 594 |
+
harmonica, mouth organ, harp, mouth harp
|
| 595 |
+
harp
|
| 596 |
+
harvester, reaper
|
| 597 |
+
hatchet
|
| 598 |
+
holster
|
| 599 |
+
home theater, home theatre
|
| 600 |
+
honeycomb
|
| 601 |
+
hook, claw
|
| 602 |
+
hoopskirt, crinoline
|
| 603 |
+
horizontal bar, high bar
|
| 604 |
+
horse cart, horse-cart
|
| 605 |
+
hourglass
|
| 606 |
+
iPod
|
| 607 |
+
iron, smoothing iron
|
| 608 |
+
jack-o'-lantern
|
| 609 |
+
jean, blue jean, denim
|
| 610 |
+
jeep, landrover
|
| 611 |
+
jersey, T-shirt, tee shirt
|
| 612 |
+
jigsaw puzzle
|
| 613 |
+
jinrikisha, ricksha, rickshaw
|
| 614 |
+
joystick
|
| 615 |
+
kimono
|
| 616 |
+
knee pad
|
| 617 |
+
knot
|
| 618 |
+
lab coat, laboratory coat
|
| 619 |
+
ladle
|
| 620 |
+
lampshade, lamp shade
|
| 621 |
+
laptop, laptop computer
|
| 622 |
+
lawn mower, mower
|
| 623 |
+
lens cap, lens cover
|
| 624 |
+
letter opener, paper knife, paperknife
|
| 625 |
+
library
|
| 626 |
+
lifeboat
|
| 627 |
+
lighter, light, igniter, ignitor
|
| 628 |
+
limousine, limo
|
| 629 |
+
liner, ocean liner
|
| 630 |
+
lipstick, lip rouge
|
| 631 |
+
Loafer
|
| 632 |
+
lotion
|
| 633 |
+
loudspeaker, speaker, speaker unit, loudspeaker system, speaker system
|
| 634 |
+
loupe, jeweler's loupe
|
| 635 |
+
lumbermill, sawmill
|
| 636 |
+
magnetic compass
|
| 637 |
+
mailbag, postbag
|
| 638 |
+
mailbox, letter box
|
| 639 |
+
maillot
|
| 640 |
+
maillot, tank suit
|
| 641 |
+
manhole cover
|
| 642 |
+
maraca
|
| 643 |
+
marimba, xylophone
|
| 644 |
+
mask
|
| 645 |
+
matchstick
|
| 646 |
+
maypole
|
| 647 |
+
maze, labyrinth
|
| 648 |
+
measuring cup
|
| 649 |
+
medicine chest, medicine cabinet
|
| 650 |
+
megalith, megalithic structure
|
| 651 |
+
microphone, mike
|
| 652 |
+
microwave, microwave oven
|
| 653 |
+
military uniform
|
| 654 |
+
milk can
|
| 655 |
+
minibus
|
| 656 |
+
miniskirt, mini
|
| 657 |
+
minivan
|
| 658 |
+
missile
|
| 659 |
+
mitten
|
| 660 |
+
mixing bowl
|
| 661 |
+
mobile home, manufactured home
|
| 662 |
+
Model T
|
| 663 |
+
modem
|
| 664 |
+
monastery
|
| 665 |
+
monitor
|
| 666 |
+
moped
|
| 667 |
+
mortar
|
| 668 |
+
mortarboard
|
| 669 |
+
mosque
|
| 670 |
+
mosquito net
|
| 671 |
+
motor scooter, scooter
|
| 672 |
+
mountain bike, all-terrain bike, off-roader
|
| 673 |
+
mountain tent
|
| 674 |
+
mouse, computer mouse
|
| 675 |
+
mousetrap
|
| 676 |
+
moving van
|
| 677 |
+
muzzle
|
| 678 |
+
nail
|
| 679 |
+
neck brace
|
| 680 |
+
necklace
|
| 681 |
+
nipple
|
| 682 |
+
notebook, notebook computer
|
| 683 |
+
obelisk
|
| 684 |
+
oboe, hautboy, hautbois
|
| 685 |
+
ocarina, sweet potato
|
| 686 |
+
odometer, hodometer, mileometer, milometer
|
| 687 |
+
oil filter
|
| 688 |
+
organ, pipe organ
|
| 689 |
+
oscilloscope, scope, cathode-ray oscilloscope, CRO
|
| 690 |
+
overskirt
|
| 691 |
+
oxcart
|
| 692 |
+
oxygen mask
|
| 693 |
+
packet
|
| 694 |
+
paddle, boat paddle
|
| 695 |
+
paddlewheel, paddle wheel
|
| 696 |
+
padlock
|
| 697 |
+
paintbrush
|
| 698 |
+
pajama, pyjama, pj's, jammies
|
| 699 |
+
palace
|
| 700 |
+
panpipe, pandean pipe, syrinx
|
| 701 |
+
paper towel
|
| 702 |
+
parachute, chute
|
| 703 |
+
parallel bars, bars
|
| 704 |
+
park bench
|
| 705 |
+
parking meter
|
| 706 |
+
passenger car, coach, carriage
|
| 707 |
+
patio, terrace
|
| 708 |
+
pay-phone, pay-station
|
| 709 |
+
pedestal, plinth, footstall
|
| 710 |
+
pencil box, pencil case
|
| 711 |
+
pencil sharpener
|
| 712 |
+
perfume, essence
|
| 713 |
+
Petri dish
|
| 714 |
+
photocopier
|
| 715 |
+
pick, plectrum, plectron
|
| 716 |
+
pickelhaube
|
| 717 |
+
picket fence, paling
|
| 718 |
+
pickup, pickup truck
|
| 719 |
+
pier
|
| 720 |
+
piggy bank, penny bank
|
| 721 |
+
pill bottle
|
| 722 |
+
pillow
|
| 723 |
+
ping-pong ball
|
| 724 |
+
pinwheel
|
| 725 |
+
pirate, pirate ship
|
| 726 |
+
pitcher, ewer
|
| 727 |
+
plane, carpenter's plane, woodworking plane
|
| 728 |
+
planetarium
|
| 729 |
+
plastic bag
|
| 730 |
+
plate rack
|
| 731 |
+
plow, plough
|
| 732 |
+
plunger, plumber's helper
|
| 733 |
+
Polaroid camera, Polaroid Land camera
|
| 734 |
+
pole
|
| 735 |
+
police van, police wagon, paddy wagon, patrol wagon, wagon, black Maria
|
| 736 |
+
poncho
|
| 737 |
+
pool table, billiard table, snooker table
|
| 738 |
+
pop bottle, soda bottle
|
| 739 |
+
pot, flowerpot
|
| 740 |
+
potter's wheel
|
| 741 |
+
power drill
|
| 742 |
+
prayer rug, prayer mat
|
| 743 |
+
printer
|
| 744 |
+
prison, prison house
|
| 745 |
+
projectile, missile
|
| 746 |
+
projector
|
| 747 |
+
puck, hockey puck
|
| 748 |
+
punching bag, punch bag, punching ball, punchball
|
| 749 |
+
purse
|
| 750 |
+
quill, quill pen
|
| 751 |
+
quilt, comforter, comfort, puff
|
| 752 |
+
racer, race car, racing car
|
| 753 |
+
racket, racquet
|
| 754 |
+
radiator
|
| 755 |
+
radio, wireless
|
| 756 |
+
radio telescope, radio reflector
|
| 757 |
+
rain barrel
|
| 758 |
+
recreational vehicle, RV, R.V.
|
| 759 |
+
reel
|
| 760 |
+
reflex camera
|
| 761 |
+
refrigerator, icebox
|
| 762 |
+
remote control, remote
|
| 763 |
+
restaurant, eating house, eating place, eatery
|
| 764 |
+
revolver, six-gun, six-shooter
|
| 765 |
+
rifle
|
| 766 |
+
rocking chair, rocker
|
| 767 |
+
rotisserie
|
| 768 |
+
rubber eraser, rubber, pencil eraser
|
| 769 |
+
rugby ball
|
| 770 |
+
rule, ruler
|
| 771 |
+
running shoe
|
| 772 |
+
safe
|
| 773 |
+
safety pin
|
| 774 |
+
saltshaker, salt shaker
|
| 775 |
+
sandal
|
| 776 |
+
sarong
|
| 777 |
+
sax, saxophone
|
| 778 |
+
scabbard
|
| 779 |
+
scale, weighing machine
|
| 780 |
+
school bus
|
| 781 |
+
schooner
|
| 782 |
+
scoreboard
|
| 783 |
+
screen, CRT screen
|
| 784 |
+
screw
|
| 785 |
+
screwdriver
|
| 786 |
+
seat belt, seatbelt
|
| 787 |
+
sewing machine
|
| 788 |
+
shield, buckler
|
| 789 |
+
shoe shop, shoe-shop, shoe store
|
| 790 |
+
shoji
|
| 791 |
+
shopping basket
|
| 792 |
+
shopping cart
|
| 793 |
+
shovel
|
| 794 |
+
shower cap
|
| 795 |
+
shower curtain
|
| 796 |
+
ski
|
| 797 |
+
ski mask
|
| 798 |
+
sleeping bag
|
| 799 |
+
slide rule, slipstick
|
| 800 |
+
sliding door
|
| 801 |
+
slot, one-armed bandit
|
| 802 |
+
snorkel
|
| 803 |
+
snowmobile
|
| 804 |
+
snowplow, snowplough
|
| 805 |
+
soap dispenser
|
| 806 |
+
soccer ball
|
| 807 |
+
sock
|
| 808 |
+
solar dish, solar collector, solar furnace
|
| 809 |
+
sombrero
|
| 810 |
+
soup bowl
|
| 811 |
+
space bar
|
| 812 |
+
space heater
|
| 813 |
+
space shuttle
|
| 814 |
+
spatula
|
| 815 |
+
speedboat
|
| 816 |
+
spider web, spider's web
|
| 817 |
+
spindle
|
| 818 |
+
sports car, sport car
|
| 819 |
+
spotlight, spot
|
| 820 |
+
stage
|
| 821 |
+
steam locomotive
|
| 822 |
+
steel arch bridge
|
| 823 |
+
steel drum
|
| 824 |
+
stethoscope
|
| 825 |
+
stole
|
| 826 |
+
stone wall
|
| 827 |
+
stopwatch, stop watch
|
| 828 |
+
stove
|
| 829 |
+
strainer
|
| 830 |
+
streetcar, tram, tramcar, trolley, trolley car
|
| 831 |
+
stretcher
|
| 832 |
+
studio couch, day bed
|
| 833 |
+
stupa, tope
|
| 834 |
+
submarine, pigboat, sub, U-boat
|
| 835 |
+
suit, suit of clothes
|
| 836 |
+
sundial
|
| 837 |
+
sunglass
|
| 838 |
+
sunglasses, dark glasses, shades
|
| 839 |
+
sunscreen, sunblock, sun blocker
|
| 840 |
+
suspension bridge
|
| 841 |
+
swab, swob, mop
|
| 842 |
+
sweatshirt
|
| 843 |
+
swimming trunks, bathing trunks
|
| 844 |
+
swing
|
| 845 |
+
switch, electric switch, electrical switch
|
| 846 |
+
syringe
|
| 847 |
+
table lamp
|
| 848 |
+
tank, army tank, armored combat vehicle, armoured combat vehicle
|
| 849 |
+
tape player
|
| 850 |
+
teapot
|
| 851 |
+
teddy, teddy bear
|
| 852 |
+
television, television system
|
| 853 |
+
tennis ball
|
| 854 |
+
thatch, thatched roof
|
| 855 |
+
theater curtain, theatre curtain
|
| 856 |
+
thimble
|
| 857 |
+
thresher, thrasher, threshing machine
|
| 858 |
+
throne
|
| 859 |
+
tile roof
|
| 860 |
+
toaster
|
| 861 |
+
tobacco shop, tobacconist shop, tobacconist
|
| 862 |
+
toilet seat
|
| 863 |
+
torch
|
| 864 |
+
totem pole
|
| 865 |
+
tow truck, tow car, wrecker
|
| 866 |
+
toyshop
|
| 867 |
+
tractor
|
| 868 |
+
trailer truck, tractor trailer, trucking rig, rig, articulated lorry, semi
|
| 869 |
+
tray
|
| 870 |
+
trench coat
|
| 871 |
+
tricycle, trike, velocipede
|
| 872 |
+
trimaran
|
| 873 |
+
tripod
|
| 874 |
+
triumphal arch
|
| 875 |
+
trolleybus, trolley coach, trackless trolley
|
| 876 |
+
trombone
|
| 877 |
+
tub, vat
|
| 878 |
+
turnstile
|
| 879 |
+
typewriter keyboard
|
| 880 |
+
umbrella
|
| 881 |
+
unicycle, monocycle
|
| 882 |
+
upright, upright piano
|
| 883 |
+
vacuum, vacuum cleaner
|
| 884 |
+
vase
|
| 885 |
+
vault
|
| 886 |
+
velvet
|
| 887 |
+
vending machine
|
| 888 |
+
vestment
|
| 889 |
+
viaduct
|
| 890 |
+
violin, fiddle
|
| 891 |
+
volleyball
|
| 892 |
+
waffle iron
|
| 893 |
+
wall clock
|
| 894 |
+
wallet, billfold, notecase, pocketbook
|
| 895 |
+
wardrobe, closet, press
|
| 896 |
+
warplane, military plane
|
| 897 |
+
washbasin, handbasin, washbowl, lavabo, wash-hand basin
|
| 898 |
+
washer, automatic washer, washing machine
|
| 899 |
+
water bottle
|
| 900 |
+
water jug
|
| 901 |
+
water tower
|
| 902 |
+
whiskey jug
|
| 903 |
+
whistle
|
| 904 |
+
wig
|
| 905 |
+
window screen
|
| 906 |
+
window shade
|
| 907 |
+
Windsor tie
|
| 908 |
+
wine bottle
|
| 909 |
+
wing
|
| 910 |
+
wok
|
| 911 |
+
wooden spoon
|
| 912 |
+
wool, woolen, woollen
|
| 913 |
+
worm fence, snake fence, snake-rail fence, Virginia fence
|
| 914 |
+
wreck
|
| 915 |
+
yawl
|
| 916 |
+
yurt
|
| 917 |
+
web site, website, internet site, site
|
| 918 |
+
comic book
|
| 919 |
+
crossword puzzle, crossword
|
| 920 |
+
street sign
|
| 921 |
+
traffic light, traffic signal, stoplight
|
| 922 |
+
book jacket, dust cover, dust jacket, dust wrapper
|
| 923 |
+
menu
|
| 924 |
+
plate
|
| 925 |
+
guacamole
|
| 926 |
+
consomme
|
| 927 |
+
hot pot, hotpot
|
| 928 |
+
trifle
|
| 929 |
+
ice cream, icecream
|
| 930 |
+
ice lolly, lolly, lollipop, popsicle
|
| 931 |
+
French loaf
|
| 932 |
+
bagel, beigel
|
| 933 |
+
pretzel
|
| 934 |
+
cheeseburger
|
| 935 |
+
hotdog, hot dog, red hot
|
| 936 |
+
mashed potato
|
| 937 |
+
head cabbage
|
| 938 |
+
broccoli
|
| 939 |
+
cauliflower
|
| 940 |
+
zucchini, courgette
|
| 941 |
+
spaghetti squash
|
| 942 |
+
acorn squash
|
| 943 |
+
butternut squash
|
| 944 |
+
cucumber, cuke
|
| 945 |
+
artichoke, globe artichoke
|
| 946 |
+
bell pepper
|
| 947 |
+
cardoon
|
| 948 |
+
mushroom
|
| 949 |
+
Granny Smith
|
| 950 |
+
strawberry
|
| 951 |
+
orange
|
| 952 |
+
lemon
|
| 953 |
+
fig
|
| 954 |
+
pineapple, ananas
|
| 955 |
+
banana
|
| 956 |
+
jackfruit, jak, jack
|
| 957 |
+
custard apple
|
| 958 |
+
pomegranate
|
| 959 |
+
hay
|
| 960 |
+
carbonara
|
| 961 |
+
chocolate sauce, chocolate syrup
|
| 962 |
+
dough
|
| 963 |
+
meat loaf, meatloaf
|
| 964 |
+
pizza, pizza pie
|
| 965 |
+
potpie
|
| 966 |
+
burrito
|
| 967 |
+
red wine
|
| 968 |
+
espresso
|
| 969 |
+
cup
|
| 970 |
+
eggnog
|
| 971 |
+
alp
|
| 972 |
+
bubble
|
| 973 |
+
cliff, drop, drop-off
|
| 974 |
+
coral reef
|
| 975 |
+
geyser
|
| 976 |
+
lakeside, lakeshore
|
| 977 |
+
promontory, headland, head, foreland
|
| 978 |
+
sandbar, sand bar
|
| 979 |
+
seashore, coast, seacoast, sea-coast
|
| 980 |
+
valley, vale
|
| 981 |
+
volcano
|
| 982 |
+
ballplayer, baseball player
|
| 983 |
+
groom, bridegroom
|
| 984 |
+
scuba diver
|
| 985 |
+
rapeseed
|
| 986 |
+
daisy
|
| 987 |
+
yellow lady's slipper, yellow lady-slipper, Cypripedium calceolus, Cypripedium parviflorum
|
| 988 |
+
corn
|
| 989 |
+
acorn
|
| 990 |
+
hip, rose hip, rosehip
|
| 991 |
+
buckeye, horse chestnut, conker
|
| 992 |
+
coral fungus
|
| 993 |
+
agaric
|
| 994 |
+
gyromitra
|
| 995 |
+
stinkhorn, carrion fungus
|
| 996 |
+
earthstar
|
| 997 |
+
hen-of-the-woods, hen of the woods, Polyporus frondosus, Grifola frondosa
|
| 998 |
+
bolete
|
| 999 |
+
ear, spike, capitulum
|
| 1000 |
+
toilet tissue, toilet paper, bathroom tissue
|
inference.ipynb
ADDED
|
@@ -0,0 +1,295 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cells": [
|
| 3 |
+
{
|
| 4 |
+
"cell_type": "code",
|
| 5 |
+
"execution_count": 1,
|
| 6 |
+
"metadata": {},
|
| 7 |
+
"outputs": [],
|
| 8 |
+
"source": [
|
| 9 |
+
"device=\"cuda:0\""
|
| 10 |
+
]
|
| 11 |
+
},
|
| 12 |
+
{
|
| 13 |
+
"cell_type": "code",
|
| 14 |
+
"execution_count": 2,
|
| 15 |
+
"metadata": {},
|
| 16 |
+
"outputs": [],
|
| 17 |
+
"source": [
|
| 18 |
+
"import torch\n",
|
| 19 |
+
"import torch.nn as nn\n",
|
| 20 |
+
"import torch.nn.functional as F\n",
|
| 21 |
+
"\n",
|
| 22 |
+
"\n",
|
| 23 |
+
"class Bottleneck(nn.Module):\n",
|
| 24 |
+
" expansion = 4\n",
|
| 25 |
+
" def __init__(self, in_channels, out_channels, i_downsample=None, stride=1):\n",
|
| 26 |
+
" super(Bottleneck, self).__init__()\n",
|
| 27 |
+
" \n",
|
| 28 |
+
" self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=1, padding=0)\n",
|
| 29 |
+
" self.batch_norm1 = nn.BatchNorm2d(out_channels)\n",
|
| 30 |
+
" \n",
|
| 31 |
+
" self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, stride=stride, padding=1)\n",
|
| 32 |
+
" self.batch_norm2 = nn.BatchNorm2d(out_channels)\n",
|
| 33 |
+
" \n",
|
| 34 |
+
" self.conv3 = nn.Conv2d(out_channels, out_channels*self.expansion, kernel_size=1, stride=1, padding=0)\n",
|
| 35 |
+
" self.batch_norm3 = nn.BatchNorm2d(out_channels*self.expansion)\n",
|
| 36 |
+
" \n",
|
| 37 |
+
" self.i_downsample = i_downsample\n",
|
| 38 |
+
" self.stride = stride\n",
|
| 39 |
+
" self.relu = nn.ReLU()\n",
|
| 40 |
+
" \n",
|
| 41 |
+
" def forward(self, x):\n",
|
| 42 |
+
" identity = x.clone()\n",
|
| 43 |
+
" x = self.relu(self.batch_norm1(self.conv1(x)))\n",
|
| 44 |
+
" \n",
|
| 45 |
+
" x = self.relu(self.batch_norm2(self.conv2(x)))\n",
|
| 46 |
+
" \n",
|
| 47 |
+
" x = self.conv3(x)\n",
|
| 48 |
+
" x = self.batch_norm3(x)\n",
|
| 49 |
+
" \n",
|
| 50 |
+
" #downsample if needed\n",
|
| 51 |
+
" if self.i_downsample is not None:\n",
|
| 52 |
+
" identity = self.i_downsample(identity)\n",
|
| 53 |
+
" #add identity\n",
|
| 54 |
+
" x+=identity\n",
|
| 55 |
+
" x=self.relu(x)\n",
|
| 56 |
+
" \n",
|
| 57 |
+
" return x\n",
|
| 58 |
+
"\n",
|
| 59 |
+
"class Block(nn.Module):\n",
|
| 60 |
+
" expansion = 1\n",
|
| 61 |
+
" def __init__(self, in_channels, out_channels, i_downsample=None, stride=1):\n",
|
| 62 |
+
" super(Block, self).__init__()\n",
|
| 63 |
+
" \n",
|
| 64 |
+
"\n",
|
| 65 |
+
" self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1, stride=stride, bias=False)\n",
|
| 66 |
+
" self.batch_norm1 = nn.BatchNorm2d(out_channels)\n",
|
| 67 |
+
" self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1, stride=stride, bias=False)\n",
|
| 68 |
+
" self.batch_norm2 = nn.BatchNorm2d(out_channels)\n",
|
| 69 |
+
"\n",
|
| 70 |
+
" self.i_downsample = i_downsample\n",
|
| 71 |
+
" self.stride = stride\n",
|
| 72 |
+
" self.relu = nn.ReLU()\n",
|
| 73 |
+
"\n",
|
| 74 |
+
" def forward(self, x):\n",
|
| 75 |
+
" identity = x.clone()\n",
|
| 76 |
+
"\n",
|
| 77 |
+
" x = self.relu(self.batch_norm2(self.conv1(x)))\n",
|
| 78 |
+
" x = self.batch_norm2(self.conv2(x))\n",
|
| 79 |
+
"\n",
|
| 80 |
+
" if self.i_downsample is not None:\n",
|
| 81 |
+
" identity = self.i_downsample(identity)\n",
|
| 82 |
+
" print(x.shape)\n",
|
| 83 |
+
" print(identity.shape)\n",
|
| 84 |
+
" x += identity\n",
|
| 85 |
+
" x = self.relu(x)\n",
|
| 86 |
+
" return x\n",
|
| 87 |
+
"\n",
|
| 88 |
+
"\n",
|
| 89 |
+
" \n",
|
| 90 |
+
" \n",
|
| 91 |
+
"class ResNet(nn.Module):\n",
|
| 92 |
+
" def __init__(self, ResBlock, layer_list, num_classes, num_channels=3):\n",
|
| 93 |
+
" super(ResNet, self).__init__()\n",
|
| 94 |
+
" self.in_channels = 64\n",
|
| 95 |
+
" \n",
|
| 96 |
+
" self.conv1 = nn.Conv2d(num_channels, 64, kernel_size=7, stride=2, padding=3, bias=False)\n",
|
| 97 |
+
" self.batch_norm1 = nn.BatchNorm2d(64)\n",
|
| 98 |
+
" self.relu = nn.ReLU()\n",
|
| 99 |
+
" self.max_pool = nn.MaxPool2d(kernel_size = 3, stride=2, padding=1)\n",
|
| 100 |
+
" \n",
|
| 101 |
+
" self.layer1 = self._make_layer(ResBlock, layer_list[0], planes=64)\n",
|
| 102 |
+
" self.layer2 = self._make_layer(ResBlock, layer_list[1], planes=128, stride=2)\n",
|
| 103 |
+
" self.layer3 = self._make_layer(ResBlock, layer_list[2], planes=256, stride=2)\n",
|
| 104 |
+
" self.layer4 = self._make_layer(ResBlock, layer_list[3], planes=512, stride=2)\n",
|
| 105 |
+
" \n",
|
| 106 |
+
" self.avgpool = nn.AdaptiveAvgPool2d((1,1))\n",
|
| 107 |
+
" self.fc = nn.Linear(512*ResBlock.expansion, num_classes)\n",
|
| 108 |
+
" \n",
|
| 109 |
+
" def forward(self, x):\n",
|
| 110 |
+
" x = self.relu(self.batch_norm1(self.conv1(x)))\n",
|
| 111 |
+
" x = self.max_pool(x)\n",
|
| 112 |
+
"\n",
|
| 113 |
+
" x = self.layer1(x)\n",
|
| 114 |
+
" x = self.layer2(x)\n",
|
| 115 |
+
" x = self.layer3(x)\n",
|
| 116 |
+
" x = self.layer4(x)\n",
|
| 117 |
+
" \n",
|
| 118 |
+
" x = self.avgpool(x)\n",
|
| 119 |
+
" x = x.reshape(x.shape[0], -1)\n",
|
| 120 |
+
" x = self.fc(x)\n",
|
| 121 |
+
" \n",
|
| 122 |
+
" return x\n",
|
| 123 |
+
" \n",
|
| 124 |
+
" def _make_layer(self, ResBlock, blocks, planes, stride=1):\n",
|
| 125 |
+
" ii_downsample = None\n",
|
| 126 |
+
" layers = []\n",
|
| 127 |
+
" \n",
|
| 128 |
+
" if stride != 1 or self.in_channels != planes*ResBlock.expansion:\n",
|
| 129 |
+
" ii_downsample = nn.Sequential(\n",
|
| 130 |
+
" nn.Conv2d(self.in_channels, planes*ResBlock.expansion, kernel_size=1, stride=stride),\n",
|
| 131 |
+
" nn.BatchNorm2d(planes*ResBlock.expansion)\n",
|
| 132 |
+
" )\n",
|
| 133 |
+
" \n",
|
| 134 |
+
" layers.append(ResBlock(self.in_channels, planes, i_downsample=ii_downsample, stride=stride))\n",
|
| 135 |
+
" self.in_channels = planes*ResBlock.expansion\n",
|
| 136 |
+
" \n",
|
| 137 |
+
" for i in range(blocks-1):\n",
|
| 138 |
+
" layers.append(ResBlock(self.in_channels, planes))\n",
|
| 139 |
+
" \n",
|
| 140 |
+
" return nn.Sequential(*layers)\n",
|
| 141 |
+
"\n",
|
| 142 |
+
" \n",
|
| 143 |
+
" \n",
|
| 144 |
+
"def ResNet50(num_classes, channels=3):\n",
|
| 145 |
+
" return ResNet(Bottleneck, [3,4,6,3], num_classes, channels)\n",
|
| 146 |
+
" \n",
|
| 147 |
+
"def ResNet101(num_classes, channels=3):\n",
|
| 148 |
+
" return ResNet(Bottleneck, [3,4,23,3], num_classes, channels)\n",
|
| 149 |
+
"\n",
|
| 150 |
+
"def ResNet152(num_classes, channels=3):\n",
|
| 151 |
+
" return ResNet(Bottleneck, [3,8,36,3], num_classes, channels)"
|
| 152 |
+
]
|
| 153 |
+
},
|
| 154 |
+
{
|
| 155 |
+
"cell_type": "code",
|
| 156 |
+
"execution_count": 3,
|
| 157 |
+
"metadata": {},
|
| 158 |
+
"outputs": [],
|
| 159 |
+
"source": [
|
| 160 |
+
"model = ResNet50(num_classes=1000).to(\"cuda:0\")"
|
| 161 |
+
]
|
| 162 |
+
},
|
| 163 |
+
{
|
| 164 |
+
"cell_type": "code",
|
| 165 |
+
"execution_count": 4,
|
| 166 |
+
"metadata": {},
|
| 167 |
+
"outputs": [
|
| 168 |
+
{
|
| 169 |
+
"name": "stderr",
|
| 170 |
+
"output_type": "stream",
|
| 171 |
+
"text": [
|
| 172 |
+
"/tmp/ipykernel_978058/872111556.py:6: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n",
|
| 173 |
+
" model.load_state_dict(torch.load('/home/jovyan/Tharun/Kaggle/resnet50_imagenet_bs64_ep120.pth')) # Path to your saved model\n"
|
| 174 |
+
]
|
| 175 |
+
},
|
| 176 |
+
{
|
| 177 |
+
"name": "stdout",
|
| 178 |
+
"output_type": "stream",
|
| 179 |
+
"text": [
|
| 180 |
+
"Predicted class index: 339\n"
|
| 181 |
+
]
|
| 182 |
+
}
|
| 183 |
+
],
|
| 184 |
+
"source": [
|
| 185 |
+
"import torch\n",
|
| 186 |
+
"from torchvision import models, transforms\n",
|
| 187 |
+
"from PIL import Image\n",
|
| 188 |
+
"\n",
|
| 189 |
+
"# Load the saved model\n",
|
| 190 |
+
"model.load_state_dict(torch.load('/home/jovyan/Tharun/Kaggle/resnet50_imagenet_bs64_ep120.pth')) # Path to your saved model\n",
|
| 191 |
+
"model = model.to(\"cuda:0\") # Move model to the device (CPU or GPU)\n",
|
| 192 |
+
"model.eval() # Set the model to evaluation mode\n",
|
| 193 |
+
"\n",
|
| 194 |
+
"# Preprocess the input image\n",
|
| 195 |
+
"def preprocess_image(image_path):\n",
|
| 196 |
+
" # Define the transformations to apply to the image\n",
|
| 197 |
+
" transform = transforms.Compose([\n",
|
| 198 |
+
" transforms.Resize(256), # Resize image to 256px\n",
|
| 199 |
+
" transforms.CenterCrop(224), # Crop the center 224x224px\n",
|
| 200 |
+
" transforms.ToTensor(), # Convert image to a tensor\n",
|
| 201 |
+
" transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) # Normalize\n",
|
| 202 |
+
" ])\n",
|
| 203 |
+
" \n",
|
| 204 |
+
" # Load the image\n",
|
| 205 |
+
" image = Image.open(image_path)\n",
|
| 206 |
+
" \n",
|
| 207 |
+
" # Ensure the image has 3 channels (RGB)\n",
|
| 208 |
+
" image = image.convert(\"RGB\") # Convert image to RGB if it's not\n",
|
| 209 |
+
" \n",
|
| 210 |
+
" # Apply transformations\n",
|
| 211 |
+
" image = transform(image)\n",
|
| 212 |
+
" \n",
|
| 213 |
+
" # Add batch dimension and move image to the appropriate device\n",
|
| 214 |
+
" image = image.unsqueeze(0).to(device)\n",
|
| 215 |
+
" \n",
|
| 216 |
+
" return image\n",
|
| 217 |
+
"\n",
|
| 218 |
+
"# Function to make predictions\n",
|
| 219 |
+
"def predict_image(image_path):\n",
|
| 220 |
+
" image = preprocess_image(image_path) # Preprocess the input image\n",
|
| 221 |
+
" \n",
|
| 222 |
+
" # Forward pass to get predictions\n",
|
| 223 |
+
" with torch.no_grad():\n",
|
| 224 |
+
" outputs = model(image)\n",
|
| 225 |
+
" \n",
|
| 226 |
+
" # Get the predicted class index\n",
|
| 227 |
+
" _, predicted_class = torch.max(outputs, 1)\n",
|
| 228 |
+
" \n",
|
| 229 |
+
" # Get the predicted class label (you should have a label-to-class mapping for ImageNet)\n",
|
| 230 |
+
" predicted_class = predicted_class.item()\n",
|
| 231 |
+
" \n",
|
| 232 |
+
" # Optionally, if you have the ImageNet class labels, you can map the predicted index to a class name\n",
|
| 233 |
+
" # Example: ImageNet class labels can be downloaded or are available in a text file\n",
|
| 234 |
+
" return predicted_class\n",
|
| 235 |
+
"\n",
|
| 236 |
+
"# Path to the image you want to predict\n",
|
| 237 |
+
"image_path = \"/home/jovyan/Tharun/Kaggle/gd-dog.jpg\" # Replace with your image path\n",
|
| 238 |
+
"\n",
|
| 239 |
+
"# Get the prediction\n",
|
| 240 |
+
"predicted_class = predict_image(image_path)\n",
|
| 241 |
+
"print(f\"Predicted class index: {predicted_class}\")\n"
|
| 242 |
+
]
|
| 243 |
+
},
|
| 244 |
+
{
|
| 245 |
+
"cell_type": "code",
|
| 246 |
+
"execution_count": 5,
|
| 247 |
+
"metadata": {},
|
| 248 |
+
"outputs": [
|
| 249 |
+
{
|
| 250 |
+
"name": "stdout",
|
| 251 |
+
"output_type": "stream",
|
| 252 |
+
"text": [
|
| 253 |
+
"Predicted class: sorrel\n"
|
| 254 |
+
]
|
| 255 |
+
}
|
| 256 |
+
],
|
| 257 |
+
"source": [
|
| 258 |
+
"# Assuming you have a list of ImageNet class labels (for example, `imagenet_classes` list)\n",
|
| 259 |
+
"imagenet_classes = [line.strip() for line in open('/home/jovyan/Tharun/Kaggle/imagenet-classes.txt')] # Load class names from file\n",
|
| 260 |
+
"\n",
|
| 261 |
+
"# Get class name\n",
|
| 262 |
+
"predicted_class_name = imagenet_classes[predicted_class]\n",
|
| 263 |
+
"print(f\"Predicted class: {predicted_class_name}\")"
|
| 264 |
+
]
|
| 265 |
+
},
|
| 266 |
+
{
|
| 267 |
+
"cell_type": "code",
|
| 268 |
+
"execution_count": null,
|
| 269 |
+
"metadata": {},
|
| 270 |
+
"outputs": [],
|
| 271 |
+
"source": []
|
| 272 |
+
}
|
| 273 |
+
],
|
| 274 |
+
"metadata": {
|
| 275 |
+
"kernelspec": {
|
| 276 |
+
"display_name": "env",
|
| 277 |
+
"language": "python",
|
| 278 |
+
"name": "python3"
|
| 279 |
+
},
|
| 280 |
+
"language_info": {
|
| 281 |
+
"codemirror_mode": {
|
| 282 |
+
"name": "ipython",
|
| 283 |
+
"version": 3
|
| 284 |
+
},
|
| 285 |
+
"file_extension": ".py",
|
| 286 |
+
"mimetype": "text/x-python",
|
| 287 |
+
"name": "python",
|
| 288 |
+
"nbconvert_exporter": "python",
|
| 289 |
+
"pygments_lexer": "ipython3",
|
| 290 |
+
"version": "3.10.12"
|
| 291 |
+
}
|
| 292 |
+
},
|
| 293 |
+
"nbformat": 4,
|
| 294 |
+
"nbformat_minor": 2
|
| 295 |
+
}
|
mini.py
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import kagglehub
|
| 2 |
+
|
| 3 |
+
# Download latest version
|
| 4 |
+
path = kagglehub.dataset_download("ifigotin/imagenetmini-1000")
|
| 5 |
+
|
| 6 |
+
print("Path to dataset files:", path)
|
resnet-50-imagenet.ipynb
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"cells":[{"cell_type":"code","execution_count":1,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Number of CUDA devices: 1\n","Device 0: NVIDIA H100 PCIe\n"]}],"source":["import torch\n","\n","if torch.cuda.is_available():\n"," print(f\"Number of CUDA devices: {torch.cuda.device_count()}\")\n"," for i in range(torch.cuda.device_count()):\n"," print(f\"Device {i}: {torch.cuda.get_device_name(i)}\")\n","else:\n"," print(\"No CUDA devices available\")\n"]},{"cell_type":"code","execution_count":2,"metadata":{"execution":{"iopub.execute_input":"2024-12-22T02:50:01.688084Z","iopub.status.busy":"2024-12-22T02:50:01.687777Z","iopub.status.idle":"2024-12-22T02:50:50.139225Z","shell.execute_reply":"2024-12-22T02:50:50.138526Z","shell.execute_reply.started":"2024-12-22T02:50:01.688056Z"},"trusted":true},"outputs":[{"name":"stdout","output_type":"stream","text":["Loading the ImageNet dataset from /home/jovyan/.cache/kagglehub/datasets/ifigotin/imagenetmini-1000/versions/1/imagenet-mini/train\n","Loading the validation dataset from /home/jovyan/.cache/kagglehub/datasets/ifigotin/imagenetmini-1000/versions/1/imagenet-mini/val\n"]}],"source":["import torch\n","import torchvision\n","import torchvision.transforms as transforms\n","from tqdm import tqdm # For progress bar\n","import os\n","\n","# Set device\n","device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n","\n","# Set hyperparameters\n","num_epochs = 120\n","batch_size = 64\n","learning_rate = 3e-4\n","\n","# Initialize transformations for data augmentation\n","transform_train = transforms.Compose([\n"," transforms.Resize(256),\n"," transforms.RandomHorizontalFlip(),\n"," transforms.RandomVerticalFlip(),\n"," transforms.RandomRotation(degrees=45),\n"," transforms.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5, hue=0.5),\n"," transforms.CenterCrop(224),\n"," transforms.ToTensor(),\n"," transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])\n","])\n","\n","transform_val = transforms.Compose([\n"," transforms.Resize(256),\n"," transforms.CenterCrop(224),\n"," transforms.ToTensor(),\n"," transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])\n","])\n","\n","# Load the ImageNet Object Localization Challenge dataset\n","# train_dataset_path = '/kaggle/input/imagenet-object-localization-challenge/ILSVRC/Data/CLS-LOC/train'\n","# val_dataset_path = '/kaggle/input/imagenet-object-localization-challenge/ILSVRC/Data/CLS-LOC/val'\n","train_dataset_path = '/home/jovyan/.cache/kagglehub/datasets/ifigotin/imagenetmini-1000/versions/1/imagenet-mini/train'\n","val_dataset_path = '/home/jovyan/.cache/kagglehub/datasets/ifigotin/imagenetmini-1000/versions/1/imagenet-mini/val'\n","\n","print(f'Loading the ImageNet dataset from {train_dataset_path}')\n","train_dataset = torchvision.datasets.ImageFolder(\n"," root=train_dataset_path,\n"," transform=transform_train\n",")\n","\n","print(f'Loading the validation dataset from {val_dataset_path}')\n","val_dataset = torchvision.datasets.ImageFolder(\n"," root=val_dataset_path,\n"," transform=transform_val\n",")\n","\n","train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=batch_size, shuffle=True, num_workers=os.cpu_count()-1)\n","val_loader = torch.utils.data.DataLoader(val_dataset, batch_size=batch_size, shuffle=False, num_workers=os.cpu_count()-1)"]},{"cell_type":"code","execution_count":3,"metadata":{"execution":{"iopub.execute_input":"2024-12-22T02:50:50.140765Z","iopub.status.busy":"2024-12-22T02:50:50.140326Z","iopub.status.idle":"2024-12-22T02:50:50.156435Z","shell.execute_reply":"2024-12-22T02:50:50.155604Z","shell.execute_reply.started":"2024-12-22T02:50:50.140736Z"},"trusted":true},"outputs":[],"source":["import torch\n","import torch.nn as nn\n","import torch.nn.functional as F\n","\n","\n","class Bottleneck(nn.Module):\n"," expansion = 4\n"," def __init__(self, in_channels, out_channels, i_downsample=None, stride=1):\n"," super(Bottleneck, self).__init__()\n"," \n"," self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=1, padding=0)\n"," self.batch_norm1 = nn.BatchNorm2d(out_channels)\n"," \n"," self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, stride=stride, padding=1)\n"," self.batch_norm2 = nn.BatchNorm2d(out_channels)\n"," \n"," self.conv3 = nn.Conv2d(out_channels, out_channels*self.expansion, kernel_size=1, stride=1, padding=0)\n"," self.batch_norm3 = nn.BatchNorm2d(out_channels*self.expansion)\n"," \n"," self.i_downsample = i_downsample\n"," self.stride = stride\n"," self.relu = nn.ReLU()\n"," \n"," def forward(self, x):\n"," identity = x.clone()\n"," x = self.relu(self.batch_norm1(self.conv1(x)))\n"," \n"," x = self.relu(self.batch_norm2(self.conv2(x)))\n"," \n"," x = self.conv3(x)\n"," x = self.batch_norm3(x)\n"," \n"," #downsample if needed\n"," if self.i_downsample is not None:\n"," identity = self.i_downsample(identity)\n"," #add identity\n"," x+=identity\n"," x=self.relu(x)\n"," \n"," return x\n","\n","class Block(nn.Module):\n"," expansion = 1\n"," def __init__(self, in_channels, out_channels, i_downsample=None, stride=1):\n"," super(Block, self).__init__()\n"," \n","\n"," self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1, stride=stride, bias=False)\n"," self.batch_norm1 = nn.BatchNorm2d(out_channels)\n"," self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1, stride=stride, bias=False)\n"," self.batch_norm2 = nn.BatchNorm2d(out_channels)\n","\n"," self.i_downsample = i_downsample\n"," self.stride = stride\n"," self.relu = nn.ReLU()\n","\n"," def forward(self, x):\n"," identity = x.clone()\n","\n"," x = self.relu(self.batch_norm2(self.conv1(x)))\n"," x = self.batch_norm2(self.conv2(x))\n","\n"," if self.i_downsample is not None:\n"," identity = self.i_downsample(identity)\n"," print(x.shape)\n"," print(identity.shape)\n"," x += identity\n"," x = self.relu(x)\n"," return x\n","\n","\n"," \n"," \n","class ResNet(nn.Module):\n"," def __init__(self, ResBlock, layer_list, num_classes, num_channels=3):\n"," super(ResNet, self).__init__()\n"," self.in_channels = 64\n"," \n"," self.conv1 = nn.Conv2d(num_channels, 64, kernel_size=7, stride=2, padding=3, bias=False)\n"," self.batch_norm1 = nn.BatchNorm2d(64)\n"," self.relu = nn.ReLU()\n"," self.max_pool = nn.MaxPool2d(kernel_size = 3, stride=2, padding=1)\n"," \n"," self.layer1 = self._make_layer(ResBlock, layer_list[0], planes=64)\n"," self.layer2 = self._make_layer(ResBlock, layer_list[1], planes=128, stride=2)\n"," self.layer3 = self._make_layer(ResBlock, layer_list[2], planes=256, stride=2)\n"," self.layer4 = self._make_layer(ResBlock, layer_list[3], planes=512, stride=2)\n"," \n"," self.avgpool = nn.AdaptiveAvgPool2d((1,1))\n"," self.fc = nn.Linear(512*ResBlock.expansion, num_classes)\n"," \n"," def forward(self, x):\n"," x = self.relu(self.batch_norm1(self.conv1(x)))\n"," x = self.max_pool(x)\n","\n"," x = self.layer1(x)\n"," x = self.layer2(x)\n"," x = self.layer3(x)\n"," x = self.layer4(x)\n"," \n"," x = self.avgpool(x)\n"," x = x.reshape(x.shape[0], -1)\n"," x = self.fc(x)\n"," \n"," return x\n"," \n"," def _make_layer(self, ResBlock, blocks, planes, stride=1):\n"," ii_downsample = None\n"," layers = []\n"," \n"," if stride != 1 or self.in_channels != planes*ResBlock.expansion:\n"," ii_downsample = nn.Sequential(\n"," nn.Conv2d(self.in_channels, planes*ResBlock.expansion, kernel_size=1, stride=stride),\n"," nn.BatchNorm2d(planes*ResBlock.expansion)\n"," )\n"," \n"," layers.append(ResBlock(self.in_channels, planes, i_downsample=ii_downsample, stride=stride))\n"," self.in_channels = planes*ResBlock.expansion\n"," \n"," for i in range(blocks-1):\n"," layers.append(ResBlock(self.in_channels, planes))\n"," \n"," return nn.Sequential(*layers)\n","\n"," \n"," \n","def ResNet50(num_classes, channels=3):\n"," return ResNet(Bottleneck, [3,4,6,3], num_classes, channels)\n"," \n","def ResNet101(num_classes, channels=3):\n"," return ResNet(Bottleneck, [3,4,23,3], num_classes, channels)\n","\n","def ResNet152(num_classes, channels=3):\n"," return ResNet(Bottleneck, [3,8,36,3], num_classes, channels)"]},{"cell_type":"code","execution_count":4,"metadata":{},"outputs":[],"source":["model = ResNet50(num_classes=1000).to(device)"]},{"cell_type":"code","execution_count":5,"metadata":{},"outputs":[{"name":"stderr","output_type":"stream","text":["/home/jovyan/env/lib/python3.10/site-packages/torch_lr_finder/lr_finder.py:5: TqdmExperimentalWarning: Using `tqdm.autonotebook.tqdm` in notebook mode. Use `tqdm.tqdm` instead to force console mode (e.g. in jupyter console)\n"," from tqdm.autonotebook import tqdm\n"]},{"data":{"application/vnd.jupyter.widget-view+json":{"model_id":"15d815b5e96e4c64b45066bfb73e84bd","version_major":2,"version_minor":0},"text/plain":[" 0%| | 0/200 [00:00<?, ?it/s]"]},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["Stopping early, the loss has diverged\n","Learning rate search finished. See the graph with {finder_name}.plot()\n","LR suggestion: steepest gradient\n","Suggested LR: 8.11E-03\n"]},{"data":{"image/png":"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/PLLeuSRRxr8GrHP7h//+Ifat29fa9/BC556PJ7477FKvpFIpMGvDQCJFo7UJDPOxFYnZwBwfXXrJnXtKtW1rLzDET2nW7dGC8HhcOj73/++7r33Xn322WdKSkrSW2+9JUlKSkpSOByudfxpp52mDRs2qG3btvre975X6+Hz+ZSbm6v8/Hx98803h+w/OMn45JNP4r+HQiGtWLFCvXr1ir/Ol19+qS5duhxynVhiUd/YD9atWzd5PB59+umn8W0lJSVav379MT+3JUuWqHPnzpo+fboGDRqk7t27a8uWLbWO6dWrl5YuXXrE93yw3r17y+v1auvWrYe8544dOx4zppi6vHcAsJpgOPoPMreLZMZenE7pppvqd85NNzVaReClS5fqf//3f7V8+XJt3bpVb775pnbv3h1PKLp06aLPP/9c69at0549exQMBjVhwgS1bt1a48aN04cffqiCggItXLhQN910k7799ltJ0r333qsZM2bo8ccf1/r16/XFF19o9uzZevTRR2u9/qxZs/TWW2/p66+/1uTJk7Vv3z5dc801kqILhxYVFenyyy/Xp59+qk2bNundd9/V1VdfrXA43KDYD5aRkaGJEyfqtttu04IFC/Tll19q0qRJcjqdx1y3qHv37tq6datefvllbdq0SY8//ng8kYq5+eab9ec//1mzZ8/W+vXrdffdd+vLL7884jUzMjJ066236he/+IXmzp2rTZs2aeXKlXriiSc0d+7cY/zX3K9Lly4qKCjQqlWrtGfPHgUCgTqfCwCJErJINxMDgBsymNLvN6Z7d2Pc7qMP+nW7jTn55OjxjeSrr74yo0aNMm3atDFer9ecfPLJ5oknnojv37Vrlzn33HNNenq6kWQWLFhgjDFm+/bt5sorrzStW7c2Xq/XdOvWzfz0pz+t9bm8+OKLZsCAASYpKcm0atXKnHXWWebNN980xuwfAPzSSy+ZwYMHm6SkJNO7d2/zn//8p1Z869evN+PHjzdZWVkmJSXF9OzZ00yZMsVEIpEGx34wv99vfvzjH5vU1FSTl5dnHn30UTN48GBzxx13xI/p3Lmzeeyxxw4597bbbjM5OTkmPT3dXHbZZeaxxx4zPp+v1jH333+/ad26tUlPTzcTJ040v/zlL486mykSiZiZM2eaHj16GI/HY9q0aWNGjRplPvjgA2PM/gHA+/bti5/z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ZrPFBwAAaovNZqJlpkZ5ebn69++vWbNmHfW4t956S5988ony8/ObKTIAAHA4sUUm3Rap/itJ7kS++JgxYzRmzJijHvPdd9/pxhtv1Lvvvqvzzz//mNcMBAIKBALx536//7jjBAAAUbEKwHQz1VEkEtEVV1yh2267TX369KnTOTNmzJDP54s/Onbs2MRRAgBw4oh3M1lkKQPJ4snMgw8+KLfbrZtuuqnO50ybNk0lJSXxR2FhYRNGCADAiSU2AJhupjpYsWKFfv/732vlypVyOOr+gXm9Xnm93iaMDACAE1dsajZ1Zurgww8/1K5du9SpUye53W653W5t2bJFt9xyi7p06ZLo8AAAOCGFLLicgWVbZq644gqNHDmy1rZRo0bpiiuu0NVXX52gqAAAOLHFZzNZqGUmoclMWVmZNm7cGH9eUFCgVatWKTs7W506dVJOTk6t4z0ej/Ly8tSjR4/mDhUAAOiAbibGzEQtX75cI0aMiD+fOnWqJGnixImaM2dOgqICAABHsn9tJrqZJEnDhw+XMabOx2/evLnpggEAAMcUWzXbY6GWGeukVQAAwPKCkRZSNK+wsFDffvtt/PmyZcs0ZcoUPf30040WGAAAsJ5wvM6MddpDGhTJj3/8Yy1YsECStGPHDp177rlatmyZpk+frt/85jeNGiAAALCOULwCsM1bZtasWaPBgwdLkl599VX17dtXS5Ys0YsvvsjAXQAAWrD9azPZvGUmGAzGq+y+//77uuCCCyRJPXv21Pbt2xsvOgAAYCnhSAsZANynTx899dRT+vDDD/Xvf/9bo0ePliRt27btkNowAACg5QhasM5Mg5KZBx98UH/60580fPhwXX755erfv78k6e233453PwEAgJZnfwVg63QzNajOzPDhw7Vnzx75/X61atUqvv3aa69VampqowUHAACsZX/RPJu3zFRWVioQCMQTmS1btmjmzJlat26d2rZt26gBAgAA69i/nIF1WmYaFMm4ceP0/PPPS5KKi4s1ZMgQPfLII7rwwgv15JNPNmqAAADAOmIVgG3fMrNy5UqdeeaZkqTXX39dubm52rJli55//nk9/vjjjRogAACwjng3k90HAFdUVCgjI0OS9N577+miiy6S0+nUf/3Xf2nLli2NGiAAALCOWDeTx+7dTN/73vc0b948FRYW6t1339V5550nSdq1a5cy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03pduz7n1OXYYx1ztP2H2+f3+9WxY0cVFhYqMzOzTnEmQkM+++a+fkOvUdfzGus47pHEXb8l/g2RuEca8/ot8R5pyvvDGKPS0lLl5+fL6Tz6qJgW3zLjdDrVoUOHYx7ncrnq/R+iPufU5dhjHXO0/Ufbl5mZaek/Qg357Jv7+g29Rl3Pa6zjuEcSd/2W/DdE4h7hHknM35BjtcjEMAC4xuTJk5v0nLoce6xjjra/IfFbRVPH3hjXb+g16npeYx3HPZK46/M3JLG4R07se6TFdzOdyPx+v3w+n0pKSiz9LyokDvcIjoV7BEdjlfuDlpkWzOv16u6775bX6010KLAo7hEcC/cIjsYq9wctMwAAwNZomQEAALZGMgMAAGyNZAYAANgayQwAALA1khkAAGBrJDNQcXGxBg0apAEDBqhv37565plnEh0SLKawsFDDhw9X79691a9fP7322muJDgkWNH78eLVq1UqXXHJJokOBRfz9739Xjx491L17dz377LNN9jpMzYbC4bACgYBSU1NVXl6uvn37avny5crJyUl0aLCI7du3a+fOnRowYIB27NihgQMHav369UpLS0t0aLCQhQsXqrS0VHPnztXrr7+e6HCQYKFQSL1799aCBQvk8/k0cOBALVmypEm+W2iZgVwul1JTUyVJgUBAxpg6LbmOE0e7du00YMAASVJeXp5at26toqKixAYFyxk+fLgyMjISHQYsYtmyZerTp4/at2+v9PR0jRkzRu+9916TvBbJjA0sWrRIY8eOVX5+vhwOh+bNm3fIMbNmzVKXLl2UnJysIUOGaNmyZfV6jeLiYvXv318dOnTQbbfdptatWzdS9GgOzXGPxKxYsULhcFgdO3Y8zqjRnJrzHkHLcLz3zLZt29S+ffv48/bt2+u7775rklhJZmygvLxc/fv316xZsw67/5VXXtHUqVN19913a+XKlerfv79GjRqlXbt2xY+JjYc5+LFt2zZJUlZWllavXq2CggK99NJL2rlzZ7O8NzSO5rhHJKmoqEhXXnmlnn766SZ/T2hczXWPoOVojHum2RjYiiTz1ltv1do2ePBgM3ny5PjzcDhs8vPzzYwZMxr0Gj//+c/Na6+9djxhIoGa6h6pqqoyZ555pnn++ecbK1QkSFP+HVmwYIG5+OKLGyNMWEhD7pnFixebCy+8ML7/5ptvNi+++GKTxEfLjM1VV1drxYoVGjlyZHyb0+nUyJEj9fHHH9fpGjt37lRpaakkqaSkRIsWLVKPHj2aJF40v8a4R4wxuuqqq/SDH/xAV1xxRVOFigRpjHsEJ5a63DODBw/WmjVr9N1336msrEz/+te/NGrUqCaJx90kV0Wz2bNnj8LhsHJzc2ttz83N1ddff12na2zZskXXXnttfODvjTfeqFNOOaUpwkUCNMY9snjxYr3yyivq169fvN/8hRde4D5pIRrjHpGkkSNHavXq1SovL1eHDh302muvaejQoY0dLiygLveM2+3WI488ohEjRigSieiXv/xlk82SJZmBBg8erFWrViU6DFjYGWecoUgkkugwYHHvv/9+okOAxVxwwQW64IILmvx16GayudatW8vlch0yYHfnzp3Ky8tLUFSwEu4RHAv3COrLavcMyYzNJSUlaeDAgZo/f358WyQS0fz582nehSTuERwb9wjqy2r3DN1MNlBWVqaNGzfGnxcUFGjVqlXKzs5Wp06dNHXqVE2cOFGDBg3S4MGDNXPmTJWXl+vqq69OYNRoTtwjOBbuEdSXre6ZJpkjhUa1YMECI+mQx8SJE+PHPPHEE6ZTp04mKSnJDB482HzyySeJCxjNjnsEx8I9gvqy0z3D2kwAAMDWGDMDAABsjWQGAADYGskMAACwNZIZAABgayQzAADA1khmAACArZHMAAAAWyOZAQAAtkYyAwAAbI1kBoDldenSRTNnzkx0GAAsiuUMAEiSrrrqKhUXF2vevHmJDuUQu3fvVlpamlJTUxMdymFZ+bMDTgS0zABImGAwWKfj2rRpk5BEpq7xAUgskhkAdbJmzRqNGTNG6enpys3N1RVXXKE9e/bE97/zzjs644wzlJWVpZycHP33f/+3Nm3aFN+/efNmORwOvfLKKzr77LOVnJysF198UVdddZUuvPBCPfzww2rXrp1ycnI0efLkWonEwd1MDodDzz77rMaPH6/U1FR1795db7/9dq143377bXXv3l3JyckaMWKE5s6dK4fDoeLi4iO+R4fDoSeffFIXXHCB0tLSdP/99yscDmvSpEnq2rWrUlJS1KNHD/3+97+Pn3PPPfdo7ty5+tvf/iaHwyGHw6GFCxdKkgoLC3XppZcqKytL2dnZGjdunDZv3tyw/wAAjohkBsAxFRcX6wc/+IFOPfVULV++XO+884527typSy+9NH5MeXm5pk6dquXLl2v+/PlyOp0aP368IpFIrWvdcccduvnmm7V27VqNGjVKkrRgwQJt2rRJCxYs0Ny5czVnzhzNmTPnqDHde++9uvTSS/X555/rhz/8oSZMmKCioiJJUkFBgS655BJdeOGFWr16ta677jpNnz69Tu/1nnvu0fjx4/XFF1/ommuuUSQSUYcOHfTaa6/pq6++0l133aVf/epXevXVVyVJt956qy699FKNHj1a27dv1/bt2zVs2DAFg0GNGjVKGRkZ+vDDD7V48WKlp6dr9OjRqq6urutHD6AuDAAYYyZOnGjGjRt32H333XefOe+882ptKywsNJLMunXrDnvO7t27jSTzxRdfGGOMKSgoMJLMzJkzD3ndzp07m1AoFN/2P//zP+ayyy6LP+/cubN57LHH4s8lmV//+tfx52VlZUaS+de//mWMMeb22283ffv2rfU606dPN5LMvn37Dv8B1Fx3ypQpR9wfM3nyZHPxxRfXeg8Hf3YvvPCC6dGjh4lEIvFtgUDApKSkmHffffeYrwGg7miZAXBMq1ev1oIFC5Senh5/9OzZU5LiXUkbNmzQ5Zdfrm7duikzM1NdunSRJG3durXWtQYNGnTI9fv06SOXyxV/3q5dO+3ateuoMfXr1y/+e1pamjIzM+PnrFu3Tqeffnqt4wcPHlyn93q4+GbNmqWBAweqTZs2Sk9P19NPP33I+zrY6tWrtXHjRmVkZMQ/s+zsbFVVVdXqfgNw/NyJDgCA9ZWVlWns2LF68MEHD9nXrl07SdLYsWPVuXNnPfPMM8rPz1ckElHfvn0P6VJJS0s75Boej6fWc4fDcUj3VGOcUxcHx/fyyy/r1ltv1SOPPKKhQ4cqIyNDDz30kJYuXXrU65SVlWngwIF68cUXD9nXpk2b444TwH4kMwCO6bTTTtMbb7yhLl26yO0+9M/G3r17tW7dOj3zzDM688wzJUkfffRRc4cZ16NHD/3zn/+ste3TTz9t0LUWL16sYcOG6frrr49vO7hlJSkpSeFwuNa20047Ta+88oratm2rzMzMBr02gLqhmwlAXElJiVatWlXrUVhYqMmTJ6uoqEiXX365Pv30U23atEnvvvuurr76aoXDYbVq1Uo5OTl6+umntXHjRv3nP//R1KlTE/Y+rrvuOn399de6/fbbtX79er366qvxAcUOh6Ne1+revbuWL1+ud999V+vXr9edd955SGLUpUsXff7551q3bp327NmjYDCoCRMmqHXr1ho3bpw+/PBDFRQUaOHChbrpppv07bffNtZbBSCSGQAHWLhwoU499dRaj3vvvVf5+flavHixwuGwzjvvPJ1yyimaMmWKsrKy5HQ65XQ69fLLL2vFihXq27evfvGLX+ihhx5K2Pvo2rWrXn/9db355pvq16+fnnzyyfhsJq/XW69rXXfddbrooot02WWXaciQIdq7d2+tVhpJ+ulPf6oePXpo0KBBatOmjRYvXqzU1FQtWrRInTp10kUXXaRevXpp0qRJqqqqoqUGaGRUAAZwQrj//vv11FNPqbCwMNGhAGhkjJkB0CL98Y9/1Omnn66cnBwtXrxYDz30kG644YZEhwWgCZDMAGiRNmzYoN/+9rcqKipSp06ddMstt2jatGmJDgtAE6CbCQAA2BoDgAEAgK2RzAAAAFsjmQEAALZGMgMAAGyNZAYAANgayQwAALA1khkAAGBrJDMAAMDW/j/KaEQt6wgcxAAAAABJRU5ErkJggg==","text/plain":["<Figure size 640x480 with 1 Axes>"]},"metadata":{},"output_type":"display_data"}],"source":["from torch_lr_finder import LRFinder\n","optimizer = torch.optim.Adam(model.parameters(), lr=3e-4, weight_decay=1e-4)\n","criterion = nn.CrossEntropyLoss()\n","lr_finder = LRFinder(model, optimizer, criterion, device=\"cuda\")\n","lr_finder.range_test(train_loader, end_lr=10, num_iter=200, step_mode=\"exp\")\n","_ , best_lr = lr_finder.plot() # to inspect the loss-learning rate graph\n","lr_finder.reset()"]},{"cell_type":"code","execution_count":6,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Training the model on ImageNet\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 1/120: 100%|ββββββββββ| 543/543 [01:19<00:00, 6.82it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 1/120 - Training Loss: 6.9605, Training Accuracy: 0.24%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 2/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.59it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 2/120 - Training Loss: 6.8293, Training Accuracy: 0.34%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 3/120: 100%|ββββββββββ| 543/543 [01:23<00:00, 6.46it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 3/120 - Training Loss: 6.7652, Training Accuracy: 0.40%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 4/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.54it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 4/120 - Training Loss: 6.6984, Training Accuracy: 0.54%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 5/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.72it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 5/120 - Training Loss: 6.6378, Training Accuracy: 0.64%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 6/120: 100%|ββββββββββ| 543/543 [01:19<00:00, 6.81it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 6/120 - Training Loss: 6.5298, Training Accuracy: 0.87%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 7/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.58it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 7/120 - Training Loss: 6.3680, Training Accuracy: 1.24%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 8/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.56it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 8/120 - Training Loss: 6.2427, Training Accuracy: 1.56%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 9/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.76it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 9/120 - Training Loss: 6.1240, Training Accuracy: 1.94%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 10/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.76it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 10/120 - Training Loss: 6.0081, Training Accuracy: 2.43%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 11/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.72it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 11/120 - Training Loss: 5.8858, Training Accuracy: 2.87%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 12/120: 100%|ββββββββββ| 543/543 [01:19<00:00, 6.80it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 12/120 - Training Loss: 5.7630, Training Accuracy: 3.44%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 13/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.63it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 13/120 - Training Loss: 5.6355, Training Accuracy: 4.35%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 14/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.69it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 14/120 - Training Loss: 5.5218, Training Accuracy: 4.92%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 15/120: 100%|ββββββββββ| 543/543 [01:19<00:00, 6.83it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 15/120 - Training Loss: 5.4045, Training Accuracy: 5.76%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 16/120: 100%|ββββββββββ| 543/543 [01:23<00:00, 6.47it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 16/120 - Training Loss: 5.2993, Training Accuracy: 6.64%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 17/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.54it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 17/120 - Training Loss: 5.1903, Training Accuracy: 7.39%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 18/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.77it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 18/120 - Training Loss: 5.0770, Training Accuracy: 8.36%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 19/120: 100%|ββββββββββ| 543/543 [01:24<00:00, 6.45it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 19/120 - Training Loss: 4.9620, Training Accuracy: 9.24%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 20/120: 100%|ββββββββββ| 543/543 [01:27<00:00, 6.22it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 20/120 - Training Loss: 4.8556, Training Accuracy: 10.39%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 21/120: 100%|ββββββββββ| 543/543 [01:24<00:00, 6.39it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 21/120 - Training Loss: 4.7491, Training Accuracy: 11.45%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 22/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.63it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 22/120 - Training Loss: 4.6427, Training Accuracy: 12.27%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 23/120: 100%|ββββββββββ| 543/543 [01:19<00:00, 6.79it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 23/120 - Training Loss: 4.5412, Training Accuracy: 13.50%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 24/120: 100%|ββββββββββ| 543/543 [01:19<00:00, 6.79it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 24/120 - Training Loss: 4.4443, Training Accuracy: 14.14%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 25/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.57it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 25/120 - Training Loss: 4.3367, Training Accuracy: 15.75%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 26/120: 100%|ββββββββββ| 543/543 [01:24<00:00, 6.46it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 26/120 - Training Loss: 4.2294, Training Accuracy: 16.76%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 27/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.65it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 27/120 - Training Loss: 4.1470, Training Accuracy: 17.71%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 28/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.58it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 28/120 - Training Loss: 4.0461, Training Accuracy: 18.78%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 29/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.70it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 29/120 - Training Loss: 3.9508, Training Accuracy: 20.00%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 30/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.61it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 30/120 - Training Loss: 3.8641, Training Accuracy: 21.00%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 31/120: 100%|ββββββββββ| 543/543 [01:19<00:00, 6.81it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 31/120 - Training Loss: 3.7645, Training Accuracy: 22.42%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 32/120: 100%|ββββββββββ| 543/543 [01:26<00:00, 6.25it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 32/120 - Training Loss: 3.6751, Training Accuracy: 23.74%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 33/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.75it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 33/120 - Training Loss: 3.5752, Training Accuracy: 24.70%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 34/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.57it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 34/120 - Training Loss: 3.4737, Training Accuracy: 26.52%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 35/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.63it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 35/120 - Training Loss: 3.3980, Training Accuracy: 27.30%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 36/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.73it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 36/120 - Training Loss: 3.2857, Training Accuracy: 28.90%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 37/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.55it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 37/120 - Training Loss: 3.2040, Training Accuracy: 30.42%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 38/120: 100%|ββββββββββ| 543/543 [01:19<00:00, 6.79it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 38/120 - Training Loss: 3.1034, Training Accuracy: 31.92%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 39/120: 100%|ββββββββββ| 543/543 [01:23<00:00, 6.47it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 39/120 - Training Loss: 3.0145, Training Accuracy: 33.11%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 40/120: 100%|ββββββββββ| 543/543 [01:19<00:00, 6.79it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 40/120 - Training Loss: 2.9228, Training Accuracy: 34.47%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 41/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.58it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 41/120 - Training Loss: 2.8409, Training Accuracy: 35.72%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 42/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.67it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 42/120 - Training Loss: 2.7390, Training Accuracy: 37.39%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 43/120: 100%|ββββββββββ| 543/543 [01:19<00:00, 6.82it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 43/120 - Training Loss: 2.6607, Training Accuracy: 39.06%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 44/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.68it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 44/120 - Training Loss: 2.5639, Training Accuracy: 40.69%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 45/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.72it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 45/120 - Training Loss: 2.4654, Training Accuracy: 42.27%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 46/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.74it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 46/120 - Training Loss: 2.3758, Training Accuracy: 44.00%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 47/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.68it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 47/120 - Training Loss: 2.2870, Training Accuracy: 45.50%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 48/120: 100%|ββββββββββ| 543/543 [01:24<00:00, 6.46it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 48/120 - Training Loss: 2.2153, Training Accuracy: 46.72%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 49/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.68it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 49/120 - Training Loss: 2.1197, Training Accuracy: 48.34%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 50/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.64it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 50/120 - Training Loss: 2.0399, Training Accuracy: 50.16%\n","Checkpoint saved at epoch 50 with accuracy 50.16% at checkpoints/epoch_050_bs64.pth\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 51/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.71it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 51/120 - Training Loss: 1.9467, Training Accuracy: 52.02%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 52/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.56it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 52/120 - Training Loss: 1.8707, Training Accuracy: 53.72%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 53/120: 100%|ββββββββββ| 543/543 [01:23<00:00, 6.49it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 53/120 - Training Loss: 1.7942, Training Accuracy: 54.64%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 54/120: 100%|ββββββββββ| 543/543 [01:23<00:00, 6.54it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 54/120 - Training Loss: 1.7012, Training Accuracy: 56.85%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 55/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.66it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 55/120 - Training Loss: 1.6348, Training Accuracy: 58.01%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 56/120: 100%|ββββββββββ| 543/543 [01:23<00:00, 6.47it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 56/120 - Training Loss: 1.5495, Training Accuracy: 59.72%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 57/120: 100%|ββββββββββ| 543/543 [01:23<00:00, 6.49it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 57/120 - Training Loss: 1.4835, Training Accuracy: 61.06%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 58/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.70it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 58/120 - Training Loss: 1.4047, Training Accuracy: 63.16%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 59/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.75it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 59/120 - Training Loss: 1.3414, Training Accuracy: 64.55%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 60/120: 100%|ββββββββββ| 543/543 [01:26<00:00, 6.27it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 60/120 - Training Loss: 1.2781, Training Accuracy: 66.10%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 61/120: 100%|ββββββββββ| 543/543 [01:26<00:00, 6.31it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 61/120 - Training Loss: 1.2124, Training Accuracy: 67.54%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 62/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.75it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 62/120 - Training Loss: 1.1647, Training Accuracy: 68.55%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 63/120: 100%|ββββββββββ| 543/543 [01:19<00:00, 6.79it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 63/120 - Training Loss: 1.0914, Training Accuracy: 70.17%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 64/120: 100%|ββββββββββ| 543/543 [01:24<00:00, 6.43it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 64/120 - Training Loss: 1.0561, Training Accuracy: 71.38%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 65/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.72it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 65/120 - Training Loss: 0.9971, Training Accuracy: 72.66%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 66/120: 100%|ββββββββββ| 543/543 [01:23<00:00, 6.52it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 66/120 - Training Loss: 0.9487, Training Accuracy: 73.94%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 67/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.78it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 67/120 - Training Loss: 0.8944, Training Accuracy: 75.18%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 68/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.60it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 68/120 - Training Loss: 0.8484, Training Accuracy: 76.50%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 69/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.77it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 69/120 - Training Loss: 0.8090, Training Accuracy: 77.20%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 70/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.54it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 70/120 - Training Loss: 0.7662, Training Accuracy: 78.25%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 71/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.66it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 71/120 - Training Loss: 0.7242, Training Accuracy: 79.15%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 72/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.61it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 72/120 - Training Loss: 0.6986, Training Accuracy: 80.34%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 73/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.58it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 73/120 - Training Loss: 0.6341, Training Accuracy: 81.79%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 74/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.70it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 74/120 - Training Loss: 0.6147, Training Accuracy: 82.39%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 75/120: 100%|ββββββββββ| 543/543 [01:24<00:00, 6.46it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 75/120 - Training Loss: 0.5838, Training Accuracy: 83.23%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 76/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.71it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 76/120 - Training Loss: 0.5637, Training Accuracy: 83.81%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 77/120: 100%|ββββββββββ| 543/543 [01:24<00:00, 6.46it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 77/120 - Training Loss: 0.5262, Training Accuracy: 84.75%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 78/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.71it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 78/120 - Training Loss: 0.4961, Training Accuracy: 85.69%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 79/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.76it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 79/120 - Training Loss: 0.4731, Training Accuracy: 86.31%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 80/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.69it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 80/120 - Training Loss: 0.4580, Training Accuracy: 86.50%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 81/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.67it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 81/120 - Training Loss: 0.4209, Training Accuracy: 87.87%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 82/120: 100%|ββββββββββ| 543/543 [01:23<00:00, 6.52it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 82/120 - Training Loss: 0.4134, Training Accuracy: 87.86%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 83/120: 100%|ββββββββββ| 543/543 [01:25<00:00, 6.35it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 83/120 - Training Loss: 0.3862, Training Accuracy: 88.73%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 84/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.76it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 84/120 - Training Loss: 0.3804, Training Accuracy: 88.62%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 85/120: 100%|ββββββββββ| 543/543 [01:24<00:00, 6.46it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 85/120 - Training Loss: 0.3539, Training Accuracy: 89.62%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 86/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.71it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 86/120 - Training Loss: 0.3228, Training Accuracy: 90.66%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 87/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.59it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 87/120 - Training Loss: 0.3090, Training Accuracy: 90.95%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 88/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.62it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 88/120 - Training Loss: 0.3039, Training Accuracy: 90.93%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 89/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.72it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 89/120 - Training Loss: 0.2926, Training Accuracy: 91.36%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 90/120: 100%|ββββββββββ| 543/543 [01:25<00:00, 6.37it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 90/120 - Training Loss: 0.2714, Training Accuracy: 92.01%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 91/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.74it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 91/120 - Training Loss: 0.2554, Training Accuracy: 92.41%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 92/120: 100%|ββββββββββ| 543/543 [01:23<00:00, 6.50it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 92/120 - Training Loss: 0.2532, Training Accuracy: 92.42%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 93/120: 100%|ββββββββββ| 543/543 [01:25<00:00, 6.36it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 93/120 - Training Loss: 0.2381, Training Accuracy: 93.09%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 94/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.71it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 94/120 - Training Loss: 0.2254, Training Accuracy: 93.48%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 95/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.58it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 95/120 - Training Loss: 0.2137, Training Accuracy: 93.89%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 96/120: 100%|ββββββββββ| 543/543 [01:24<00:00, 6.40it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 96/120 - Training Loss: 0.2034, Training Accuracy: 94.17%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 97/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.64it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 97/120 - Training Loss: 0.1883, Training Accuracy: 94.41%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 98/120: 100%|ββββββββββ| 543/543 [01:23<00:00, 6.53it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 98/120 - Training Loss: 0.1871, Training Accuracy: 94.47%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 99/120: 100%|ββββββββββ| 543/543 [01:24<00:00, 6.46it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 99/120 - Training Loss: 0.1745, Training Accuracy: 94.81%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 100/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.72it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 100/120 - Training Loss: 0.1620, Training Accuracy: 95.20%\n","Checkpoint saved at epoch 100 with accuracy 95.20% at checkpoints/epoch_095_bs64.pth\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 101/120: 100%|ββββββββββ| 543/543 [01:27<00:00, 6.21it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 101/120 - Training Loss: 0.1602, Training Accuracy: 95.29%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 102/120: 100%|ββββββββββ| 543/543 [01:27<00:00, 6.18it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 102/120 - Training Loss: 0.1438, Training Accuracy: 95.83%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 103/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.69it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 103/120 - Training Loss: 0.1441, Training Accuracy: 95.70%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 104/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.74it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 104/120 - Training Loss: 0.1335, Training Accuracy: 96.16%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 105/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.73it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 105/120 - Training Loss: 0.1335, Training Accuracy: 96.07%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 106/120: 100%|ββββββββββ| 543/543 [01:23<00:00, 6.51it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 106/120 - Training Loss: 0.1210, Training Accuracy: 96.53%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 107/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.55it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 107/120 - Training Loss: 0.1130, Training Accuracy: 96.80%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 108/120: 100%|ββββββββββ| 543/543 [01:24<00:00, 6.44it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 108/120 - Training Loss: 0.1127, Training Accuracy: 96.69%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 109/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.64it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 109/120 - Training Loss: 0.1010, Training Accuracy: 97.17%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 110/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.66it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 110/120 - Training Loss: 0.0990, Training Accuracy: 97.19%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 111/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.76it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 111/120 - Training Loss: 0.0912, Training Accuracy: 97.46%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 112/120: 100%|ββββββββββ| 543/543 [01:23<00:00, 6.49it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 112/120 - Training Loss: 0.0901, Training Accuracy: 97.46%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 113/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.70it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 113/120 - Training Loss: 0.0827, Training Accuracy: 97.73%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 114/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.58it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 114/120 - Training Loss: 0.0796, Training Accuracy: 97.82%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 115/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.74it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 115/120 - Training Loss: 0.0738, Training Accuracy: 98.07%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 116/120: 100%|ββββββββββ| 543/543 [01:19<00:00, 6.82it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 116/120 - Training Loss: 0.0699, Training Accuracy: 98.13%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 117/120: 100%|ββββββββββ| 543/543 [01:20<00:00, 6.73it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 117/120 - Training Loss: 0.0656, Training Accuracy: 98.20%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 118/120: 100%|ββββββββββ| 543/543 [01:25<00:00, 6.33it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 118/120 - Training Loss: 0.0648, Training Accuracy: 98.20%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 119/120: 100%|ββββββββββ| 543/543 [01:21<00:00, 6.70it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 119/120 - Training Loss: 0.0649, Training Accuracy: 98.26%\n"]},{"name":"stderr","output_type":"stream","text":["Epoch 120/120: 100%|ββββββββββ| 543/543 [01:22<00:00, 6.57it/s]\n"]},{"name":"stdout","output_type":"stream","text":["Epoch 120/120 - Training Loss: 0.0624, Training Accuracy: 98.22%\n","Validating the model on unseen data after training...\n"]},{"name":"stderr","output_type":"stream","text":["Validating: 100%|ββββββββββ| 62/62 [00:12<00:00, 4.92it/s]"]},{"name":"stdout","output_type":"stream","text":["Validation Loss: 12.1100, Validation Accuracy: 13.36%\n","Per-class Accuracy:\n","n01440764: 0.00%\n","n01443537: 33.33%\n","n01484850: 20.00%\n","n01491361: 0.00%\n","n01494475: 20.00%\n","n01496331: 0.00%\n","n01498041: 33.33%\n","n01514668: 0.00%\n","n01514859: 0.00%\n","n01518878: 0.00%\n","n01530575: 25.00%\n","n01531178: 0.00%\n","n01532829: 0.00%\n","n01534433: 25.00%\n","n01537544: 0.00%\n","n01558993: 0.00%\n","n01560419: 66.67%\n","n01580077: 0.00%\n","n01582220: 50.00%\n","n01592084: 0.00%\n","n01601694: 0.00%\n","n01608432: 25.00%\n","n01614925: 33.33%\n","n01616318: 0.00%\n","n01622779: 50.00%\n","n01629819: 0.00%\n","n01630670: 0.00%\n","n01631663: 25.00%\n","n01632458: 0.00%\n","n01632777: 50.00%\n","n01641577: 33.33%\n","n01644373: 25.00%\n","n01644900: 0.00%\n","n01664065: 0.00%\n","n01665541: 33.33%\n","n01667114: 0.00%\n","n01667778: 0.00%\n","n01669191: 0.00%\n","n01675722: 0.00%\n","n01677366: 33.33%\n","n01682714: 0.00%\n","n01685808: 0.00%\n","n01687978: 0.00%\n","n01688243: 0.00%\n","n01689811: 0.00%\n","n01692333: 0.00%\n","n01693334: 0.00%\n","n01694178: 0.00%\n","n01695060: 0.00%\n","n01697457: 0.00%\n","n01698640: 0.00%\n","n01704323: 25.00%\n","n01728572: 0.00%\n","n01728920: 25.00%\n","n01729322: 0.00%\n","n01729977: 0.00%\n","n01734418: 0.00%\n","n01735189: 50.00%\n","n01737021: 0.00%\n","n01739381: 33.33%\n","n01740131: 0.00%\n","n01742172: 0.00%\n","n01744401: 0.00%\n","n01748264: 0.00%\n","n01749939: 25.00%\n","n01751748: 0.00%\n","n01753488: 33.33%\n","n01755581: 0.00%\n","n01756291: 0.00%\n","n01768244: 0.00%\n","n01770081: 50.00%\n","n01770393: 100.00%\n","n01773157: 60.00%\n","n01773549: 0.00%\n","n01773797: 25.00%\n","n01774384: 0.00%\n","n01774750: 0.00%\n","n01775062: 0.00%\n","n01776313: 9.09%\n","n01784675: 0.00%\n","n01795545: 0.00%\n","n01796340: 0.00%\n","n01797886: 0.00%\n","n01798484: 0.00%\n","n01806143: 0.00%\n","n01806567: 33.33%\n","n01807496: 0.00%\n","n01817953: 0.00%\n","n01818515: 33.33%\n","n01819313: 50.00%\n","n01820546: 50.00%\n","n01824575: 0.00%\n","n01828970: 25.00%\n","n01829413: 0.00%\n","n01833805: 50.00%\n","n01843065: 50.00%\n","n01843383: 0.00%\n","n01847000: 0.00%\n","n01855032: 25.00%\n","n01855672: 33.33%\n","n01860187: 25.00%\n","n01871265: 0.00%\n","n01872401: 100.00%\n","n01873310: 0.00%\n","n01877812: 0.00%\n","n01882714: 66.67%\n","n01883070: 0.00%\n","n01910747: 20.00%\n","n01914609: 0.00%\n","n01917289: 0.00%\n","n01924916: 0.00%\n","n01930112: 28.57%\n","n01943899: 0.00%\n","n01944390: 0.00%\n","n01945685: 0.00%\n","n01950731: 0.00%\n","n01955084: 0.00%\n","n01968897: 33.33%\n","n01978287: 0.00%\n","n01978455: 0.00%\n","n01980166: 0.00%\n","n01981276: 0.00%\n","n01983481: 0.00%\n","n01984695: 0.00%\n","n01985128: 0.00%\n","n01986214: 0.00%\n","n01990800: 0.00%\n","n02002556: 0.00%\n","n02002724: 40.00%\n","n02006656: 50.00%\n","n02007558: 0.00%\n","n02009229: 25.00%\n","n02009912: 0.00%\n","n02011460: 0.00%\n","n02012849: 0.00%\n","n02013706: 0.00%\n","n02017213: 0.00%\n","n02018207: 0.00%\n","n02018795: 33.33%\n","n02025239: 33.33%\n","n02027492: 0.00%\n","n02028035: 33.33%\n","n02033041: 0.00%\n","n02037110: 0.00%\n","n02051845: 0.00%\n","n02056570: 0.00%\n","n02058221: 0.00%\n","n02066245: 25.00%\n","n02071294: 0.00%\n","n02074367: 50.00%\n","n02077923: 33.33%\n","n02085620: 0.00%\n","n02085782: 80.00%\n","n02085936: 50.00%\n","n02086079: 50.00%\n","n02086240: 0.00%\n","n02086646: 66.67%\n","n02086910: 0.00%\n","n02087046: 20.00%\n","n02087394: 0.00%\n","n02088094: 25.00%\n","n02088238: 33.33%\n","n02088364: 0.00%\n","n02088466: 20.00%\n","n02088632: 0.00%\n","n02089078: 0.00%\n","n02089867: 0.00%\n","n02089973: 33.33%\n","n02090379: 0.00%\n","n02090622: 0.00%\n","n02090721: 0.00%\n","n02091032: 0.00%\n","n02091134: 33.33%\n","n02091244: 25.00%\n","n02091467: 33.33%\n","n02091635: 0.00%\n","n02091831: 0.00%\n","n02092002: 33.33%\n","n02092339: 0.00%\n","n02093256: 0.00%\n","n02093428: 0.00%\n","n02093647: 0.00%\n","n02093754: 0.00%\n","n02093859: 0.00%\n","n02093991: 25.00%\n","n02094114: 0.00%\n","n02094258: 0.00%\n","n02094433: 33.33%\n","n02095314: 33.33%\n","n02095570: 0.00%\n","n02095889: 50.00%\n","n02096051: 33.33%\n","n02096177: 0.00%\n","n02096294: 33.33%\n","n02096437: 42.86%\n","n02096585: 0.00%\n","n02097047: 0.00%\n","n02097130: 0.00%\n","n02097209: 25.00%\n","n02097298: 0.00%\n","n02097474: 33.33%\n","n02097658: 0.00%\n","n02098105: 50.00%\n","n02098286: 0.00%\n","n02098413: 40.00%\n","n02099267: 33.33%\n","n02099429: 25.00%\n","n02099601: 0.00%\n","n02099712: 0.00%\n","n02099849: 0.00%\n","n02100236: 50.00%\n","n02100583: 0.00%\n","n02100735: 0.00%\n","n02100877: 0.00%\n","n02101006: 0.00%\n","n02101388: 0.00%\n","n02101556: 0.00%\n","n02102040: 0.00%\n","n02102177: 33.33%\n","n02102318: 0.00%\n","n02102480: 0.00%\n","n02102973: 20.00%\n","n02104029: 0.00%\n","n02104365: 0.00%\n","n02105056: 0.00%\n","n02105162: 0.00%\n","n02105251: 0.00%\n","n02105412: 0.00%\n","n02105505: 50.00%\n","n02105641: 16.67%\n","n02105855: 0.00%\n","n02106030: 33.33%\n","n02106166: 33.33%\n","n02106382: 0.00%\n","n02106550: 33.33%\n","n02106662: 0.00%\n","n02107142: 0.00%\n","n02107312: 0.00%\n","n02107574: 0.00%\n","n02107683: 33.33%\n","n02107908: 33.33%\n","n02108000: 0.00%\n","n02108089: 0.00%\n","n02108422: 33.33%\n","n02108551: 33.33%\n","n02108915: 0.00%\n","n02109047: 0.00%\n","n02109525: 0.00%\n","n02109961: 25.00%\n","n02110063: 0.00%\n","n02110185: 25.00%\n","n02110341: 0.00%\n","n02110627: 40.00%\n","n02110806: 0.00%\n","n02110958: 0.00%\n","n02111129: 66.67%\n","n02111277: 33.33%\n","n02111500: 40.00%\n","n02111889: 0.00%\n","n02112018: 33.33%\n","n02112137: 0.00%\n","n02112350: 33.33%\n","n02112706: 25.00%\n","n02113023: 25.00%\n","n02113186: 0.00%\n","n02113624: 0.00%\n","n02113712: 0.00%\n","n02113799: 0.00%\n","n02113978: 33.33%\n","n02114367: 0.00%\n","n02114548: 50.00%\n","n02114712: 25.00%\n","n02114855: 33.33%\n","n02115641: 0.00%\n","n02115913: 0.00%\n","n02116738: 66.67%\n","n02117135: 16.67%\n","n02119022: 12.50%\n","n02119789: 0.00%\n","n02120079: 20.00%\n","n02120505: 33.33%\n","n02123045: 33.33%\n","n02123159: 0.00%\n","n02123394: 12.50%\n","n02123597: 0.00%\n","n02124075: 0.00%\n","n02125311: 0.00%\n","n02127052: 25.00%\n","n02128385: 40.00%\n","n02128757: 40.00%\n","n02128925: 40.00%\n","n02129165: 16.67%\n","n02129604: 12.50%\n","n02130308: 66.67%\n","n02132136: 0.00%\n","n02133161: 20.00%\n","n02134084: 14.29%\n","n02134418: 33.33%\n","n02137549: 0.00%\n","n02138441: 0.00%\n","n02165105: 0.00%\n","n02165456: 40.00%\n","n02167151: 25.00%\n","n02168699: 0.00%\n","n02169497: 25.00%\n","n02172182: 0.00%\n","n02174001: 0.00%\n","n02177972: 0.00%\n","n02190166: 0.00%\n","n02206856: 0.00%\n","n02219486: 16.67%\n","n02226429: 33.33%\n","n02229544: 66.67%\n","n02231487: 0.00%\n","n02233338: 0.00%\n","n02236044: 0.00%\n","n02256656: 0.00%\n","n02259212: 33.33%\n","n02264363: 25.00%\n","n02268443: 0.00%\n","n02268853: 25.00%\n","n02276258: 33.33%\n","n02277742: 75.00%\n","n02279972: 75.00%\n","n02280649: 33.33%\n","n02281406: 75.00%\n","n02281787: 20.00%\n","n02317335: 0.00%\n","n02319095: 0.00%\n","n02321529: 0.00%\n","n02325366: 50.00%\n","n02326432: 0.00%\n","n02328150: 25.00%\n","n02342885: 75.00%\n","n02346627: 33.33%\n","n02356798: 0.00%\n","n02361337: 0.00%\n","n02363005: 66.67%\n","n02364673: 0.00%\n","n02389026: 0.00%\n","n02391049: 33.33%\n","n02395406: 0.00%\n","n02396427: 0.00%\n","n02397096: 0.00%\n","n02398521: 0.00%\n","n02403003: 33.33%\n","n02408429: 0.00%\n","n02410509: 0.00%\n","n02412080: 0.00%\n","n02415577: 33.33%\n","n02417914: 0.00%\n","n02422106: 66.67%\n","n02422699: 0.00%\n","n02423022: 50.00%\n","n02437312: 0.00%\n","n02437616: 0.00%\n","n02441942: 0.00%\n","n02442845: 0.00%\n","n02443114: 0.00%\n","n02443484: 0.00%\n","n02444819: 0.00%\n","n02445715: 50.00%\n","n02447366: 55.56%\n","n02454379: 33.33%\n","n02457408: 50.00%\n","n02480495: 33.33%\n","n02480855: 0.00%\n","n02481823: 0.00%\n","n02483362: 0.00%\n","n02483708: 0.00%\n","n02484975: 0.00%\n","n02486261: 0.00%\n","n02486410: 0.00%\n","n02487347: 0.00%\n","n02488291: 0.00%\n","n02488702: 0.00%\n","n02489166: 33.33%\n","n02490219: 0.00%\n","n02492035: 25.00%\n","n02492660: 50.00%\n","n02493509: 0.00%\n","n02493793: 0.00%\n","n02494079: 0.00%\n","n02497673: 0.00%\n","n02500267: 50.00%\n","n02504013: 0.00%\n","n02504458: 60.00%\n","n02509815: 0.00%\n","n02510455: 66.67%\n","n02514041: 33.33%\n","n02526121: 25.00%\n","n02536864: 0.00%\n","n02606052: 50.00%\n","n02607072: 0.00%\n","n02640242: 0.00%\n","n02641379: 0.00%\n","n02643566: 0.00%\n","n02655020: 0.00%\n","n02666196: 0.00%\n","n02667093: 0.00%\n","n02669723: 0.00%\n","n02672831: 0.00%\n","n02676566: 0.00%\n","n02687172: 0.00%\n","n02690373: 40.00%\n","n02692877: 0.00%\n","n02699494: 0.00%\n","n02701002: 66.67%\n","n02704792: 0.00%\n","n02708093: 12.50%\n","n02727426: 0.00%\n","n02730930: 0.00%\n","n02747177: 0.00%\n","n02749479: 0.00%\n","n02769748: 0.00%\n","n02776631: 33.33%\n","n02777292: 0.00%\n","n02782093: 0.00%\n","n02783161: 0.00%\n","n02786058: 14.29%\n","n02787622: 0.00%\n","n02788148: 0.00%\n","n02790996: 16.67%\n","n02791124: 0.00%\n","n02791270: 0.00%\n","n02793495: 25.00%\n","n02794156: 25.00%\n","n02795169: 0.00%\n","n02797295: 0.00%\n","n02799071: 33.33%\n","n02802426: 25.00%\n","n02804414: 0.00%\n","n02804610: 0.00%\n","n02807133: 0.00%\n","n02808304: 0.00%\n","n02808440: 0.00%\n","n02814533: 0.00%\n","n02814860: 25.00%\n","n02815834: 0.00%\n","n02817516: 25.00%\n","n02823428: 25.00%\n","n02823750: 0.00%\n","n02825657: 0.00%\n","n02834397: 25.00%\n","n02835271: 0.00%\n","n02837789: 0.00%\n","n02840245: 12.50%\n","n02841315: 20.00%\n","n02843684: 0.00%\n","n02859443: 0.00%\n","n02860847: 0.00%\n","n02865351: 0.00%\n","n02869837: 0.00%\n","n02870880: 0.00%\n","n02871525: 0.00%\n","n02877765: 25.00%\n","n02879718: 66.67%\n","n02883205: 20.00%\n","n02892201: 50.00%\n","n02892767: 0.00%\n","n02894605: 0.00%\n","n02895154: 0.00%\n","n02906734: 0.00%\n","n02909870: 0.00%\n","n02910353: 25.00%\n","n02916936: 0.00%\n","n02917067: 66.67%\n","n02927161: 25.00%\n","n02930766: 33.33%\n","n02939185: 0.00%\n","n02948072: 25.00%\n","n02950826: 0.00%\n","n02951358: 0.00%\n","n02951585: 0.00%\n","n02963159: 50.00%\n","n02965783: 25.00%\n","n02966193: 0.00%\n","n02966687: 0.00%\n","n02971356: 33.33%\n","n02974003: 25.00%\n","n02977058: 25.00%\n","n02978881: 0.00%\n","n02979186: 16.67%\n","n02980441: 50.00%\n","n02981792: 0.00%\n","n02988304: 0.00%\n","n02992211: 0.00%\n","n02992529: 12.50%\n","n02999410: 0.00%\n","n03000134: 0.00%\n","n03000247: 0.00%\n","n03000684: 14.29%\n","n03014705: 0.00%\n","n03016953: 0.00%\n","n03017168: 0.00%\n","n03018349: 0.00%\n","n03026506: 0.00%\n","n03028079: 0.00%\n","n03032252: 0.00%\n","n03041632: 0.00%\n","n03042490: 0.00%\n","n03045698: 0.00%\n","n03047690: 0.00%\n","n03062245: 0.00%\n","n03063599: 0.00%\n","n03063689: 0.00%\n","n03065424: 0.00%\n","n03075370: 0.00%\n","n03085013: 0.00%\n","n03089624: 0.00%\n","n03095699: 0.00%\n","n03100240: 25.00%\n","n03109150: 27.27%\n","n03110669: 0.00%\n","n03124043: 0.00%\n","n03124170: 0.00%\n","n03125729: 0.00%\n","n03126707: 25.00%\n","n03127747: 20.00%\n","n03127925: 0.00%\n","n03131574: 33.33%\n","n03133878: 0.00%\n","n03134739: 0.00%\n","n03141823: 0.00%\n","n03146219: 0.00%\n","n03160309: 50.00%\n","n03179701: 0.00%\n","n03180011: 0.00%\n","n03187595: 0.00%\n","n03188531: 50.00%\n","n03196217: 16.67%\n","n03197337: 25.00%\n","n03201208: 50.00%\n","n03207743: 0.00%\n","n03207941: 0.00%\n","n03208938: 25.00%\n","n03216828: 25.00%\n","n03218198: 0.00%\n","n03220513: 0.00%\n","n03223299: 0.00%\n","n03240683: 20.00%\n","n03249569: 0.00%\n","n03250847: 25.00%\n","n03255030: 0.00%\n","n03259280: 0.00%\n","n03271574: 20.00%\n","n03272010: 0.00%\n","n03272562: 50.00%\n","n03290653: 44.44%\n","n03291819: 0.00%\n","n03297495: 28.57%\n","n03314780: 9.09%\n","n03325584: 0.00%\n","n03337140: 0.00%\n","n03344393: 50.00%\n","n03345487: 33.33%\n","n03347037: 0.00%\n","n03355925: 40.00%\n","n03372029: 0.00%\n","n03376595: 0.00%\n","n03379051: 0.00%\n","n03384352: 33.33%\n","n03388043: 0.00%\n","n03388183: 50.00%\n","n03388549: 0.00%\n","n03393912: 33.33%\n","n03394916: 33.33%\n","n03400231: 0.00%\n","n03404251: 0.00%\n","n03417042: 0.00%\n","n03424325: 0.00%\n","n03425413: 25.00%\n","n03443371: 0.00%\n","n03444034: 33.33%\n","n03445777: 25.00%\n","n03445924: 0.00%\n","n03447447: 0.00%\n","n03447721: 14.29%\n","n03450230: 0.00%\n","n03452741: 66.67%\n","n03457902: 50.00%\n","n03459775: 50.00%\n","n03461385: 0.00%\n","n03467068: 0.00%\n","n03476684: 0.00%\n","n03476991: 0.00%\n","n03478589: 0.00%\n","n03481172: 0.00%\n","n03482405: 0.00%\n","n03483316: 0.00%\n","n03485407: 0.00%\n","n03485794: 0.00%\n","n03492542: 0.00%\n","n03494278: 0.00%\n","n03495258: 0.00%\n","n03496892: 0.00%\n","n03498962: 0.00%\n","n03527444: 0.00%\n","n03529860: 0.00%\n","n03530642: 0.00%\n","n03532672: 0.00%\n","n03534580: 0.00%\n","n03535780: 0.00%\n","n03538406: 0.00%\n","n03544143: 0.00%\n","n03584254: 33.33%\n","n03584829: 30.00%\n","n03590841: 20.00%\n","n03594734: 0.00%\n","n03594945: 0.00%\n","n03595614: 20.00%\n","n03598930: 0.00%\n","n03599486: 33.33%\n","n03602883: 0.00%\n","n03617480: 0.00%\n","n03623198: 11.11%\n","n03627232: 25.00%\n","n03630383: 42.86%\n","n03633091: 0.00%\n","n03637318: 0.00%\n","n03642806: 0.00%\n","n03649909: 0.00%\n","n03657121: 33.33%\n","n03658185: 0.00%\n","n03661043: 0.00%\n","n03662601: 66.67%\n","n03666591: 0.00%\n","n03670208: 0.00%\n","n03673027: 50.00%\n","n03676483: 0.00%\n","n03680355: 33.33%\n","n03690938: 0.00%\n","n03691459: 33.33%\n","n03692522: 0.00%\n","n03697007: 0.00%\n","n03706229: 0.00%\n","n03709823: 0.00%\n","n03710193: 25.00%\n","n03710637: 25.00%\n","n03710721: 25.00%\n","n03717622: 0.00%\n","n03720891: 0.00%\n","n03721384: 0.00%\n","n03724870: 0.00%\n","n03729826: 25.00%\n","n03733131: 0.00%\n","n03733281: 0.00%\n","n03733805: 25.00%\n","n03742115: 0.00%\n","n03743016: 0.00%\n","n03759954: 0.00%\n","n03761084: 25.00%\n","n03763968: 0.00%\n","n03764736: 0.00%\n","n03769881: 0.00%\n","n03770439: 33.33%\n","n03770679: 25.00%\n","n03773504: 0.00%\n","n03775071: 33.33%\n","n03775546: 33.33%\n","n03776460: 25.00%\n","n03777568: 33.33%\n","n03777754: 25.00%\n","n03781244: 0.00%\n","n03782006: 0.00%\n","n03785016: 33.33%\n","n03786901: 0.00%\n","n03787032: 0.00%\n","n03788195: 0.00%\n","n03788365: 50.00%\n","n03791053: 33.33%\n","n03792782: 25.00%\n","n03792972: 33.33%\n","n03793489: 16.67%\n","n03794056: 0.00%\n","n03796401: 0.00%\n","n03803284: 0.00%\n","n03804744: 0.00%\n","n03814639: 0.00%\n","n03814906: 0.00%\n","n03825788: 12.50%\n","n03832673: 0.00%\n","n03837869: 0.00%\n","n03838899: 11.11%\n","n03840681: 0.00%\n","n03841143: 80.00%\n","n03843555: 0.00%\n","n03854065: 66.67%\n","n03857828: 66.67%\n","n03866082: 0.00%\n","n03868242: 0.00%\n","n03868863: 14.29%\n","n03871628: 0.00%\n","n03873416: 0.00%\n","n03874293: 0.00%\n","n03874599: 0.00%\n","n03876231: 0.00%\n","n03877472: 0.00%\n","n03877845: 33.33%\n","n03884397: 16.67%\n","n03887697: 11.11%\n","n03888257: 40.00%\n","n03888605: 14.29%\n","n03891251: 0.00%\n","n03891332: 0.00%\n","n03895866: 0.00%\n","n03899768: 0.00%\n","n03902125: 33.33%\n","n03903868: 0.00%\n","n03908618: 25.00%\n","n03908714: 0.00%\n","n03916031: 0.00%\n","n03920288: 20.00%\n","n03924679: 55.56%\n","n03929660: 0.00%\n","n03929855: 0.00%\n","n03930313: 33.33%\n","n03930630: 66.67%\n","n03933933: 0.00%\n","n03935335: 25.00%\n","n03937543: 0.00%\n","n03938244: 0.00%\n","n03942813: 33.33%\n","n03944341: 0.00%\n","n03947888: 0.00%\n","n03950228: 0.00%\n","n03954731: 40.00%\n","n03956157: 33.33%\n","n03958227: 0.00%\n","n03961711: 0.00%\n","n03967562: 0.00%\n","n03970156: 0.00%\n","n03976467: 25.00%\n","n03976657: 0.00%\n","n03977966: 100.00%\n","n03980874: 0.00%\n","n03982430: 0.00%\n","n03983396: 0.00%\n","n03991062: 0.00%\n","n03992509: 0.00%\n","n03995372: 25.00%\n","n03998194: 0.00%\n","n04004767: 25.00%\n","n04005630: 0.00%\n","n04008634: 0.00%\n","n04009552: 0.00%\n","n04019541: 50.00%\n","n04023962: 0.00%\n","n04026417: 25.00%\n","n04033901: 0.00%\n","n04033995: 0.00%\n","n04037443: 33.33%\n","n04039381: 0.00%\n","n04040759: 0.00%\n","n04041544: 0.00%\n","n04044716: 40.00%\n","n04049303: 66.67%\n","n04065272: 20.00%\n","n04067472: 0.00%\n","n04069434: 20.00%\n","n04070727: 25.00%\n","n04074963: 0.00%\n","n04081281: 0.00%\n","n04086273: 22.22%\n","n04090263: 0.00%\n","n04099969: 0.00%\n","n04111531: 0.00%\n","n04116512: 0.00%\n","n04118538: 66.67%\n","n04118776: 0.00%\n","n04120489: 0.00%\n","n04125021: 0.00%\n","n04127249: 0.00%\n","n04131690: 20.00%\n","n04133789: 0.00%\n","n04136333: 0.00%\n","n04141076: 25.00%\n","n04141327: 0.00%\n","n04141975: 0.00%\n","n04146614: 33.33%\n","n04147183: 16.67%\n","n04149813: 0.00%\n","n04152593: 20.00%\n","n04153751: 25.00%\n","n04154565: 0.00%\n","n04162706: 0.00%\n","n04179913: 0.00%\n","n04192698: 0.00%\n","n04200800: 0.00%\n","n04201297: 50.00%\n","n04204238: 0.00%\n","n04204347: 0.00%\n","n04208210: 0.00%\n","n04209133: 0.00%\n","n04209239: 0.00%\n","n04228054: 0.00%\n","n04229816: 33.33%\n","n04235860: 0.00%\n","n04238763: 25.00%\n","n04239074: 0.00%\n","n04243546: 0.00%\n","n04251144: 0.00%\n","n04252077: 0.00%\n","n04252225: 25.00%\n","n04254120: 0.00%\n","n04254680: 0.00%\n","n04254777: 0.00%\n","n04258138: 50.00%\n","n04259630: 0.00%\n","n04263257: 33.33%\n","n04264628: 66.67%\n","n04265275: 0.00%\n","n04266014: 25.00%\n","n04270147: 0.00%\n","n04273569: 25.00%\n","n04275548: 0.00%\n","n04277352: 0.00%\n","n04285008: 33.33%\n","n04286575: 0.00%\n","n04296562: 25.00%\n","n04310018: 33.33%\n","n04311004: 25.00%\n","n04311174: 0.00%\n","n04317175: 0.00%\n","n04325704: 0.00%\n","n04326547: 25.00%\n","n04328186: 25.00%\n","n04330267: 0.00%\n","n04332243: 0.00%\n","n04335435: 66.67%\n","n04336792: 0.00%\n","n04344873: 0.00%\n","n04346328: 0.00%\n","n04347754: 25.00%\n","n04350905: 25.00%\n","n04355338: 0.00%\n","n04355933: 0.00%\n","n04356056: 0.00%\n","n04357314: 20.00%\n","n04366367: 0.00%\n","n04367480: 16.67%\n","n04370456: 0.00%\n","n04371430: 0.00%\n","n04371774: 0.00%\n","n04372370: 20.00%\n","n04376876: 0.00%\n","n04380533: 25.00%\n","n04389033: 0.00%\n","n04392985: 0.00%\n","n04398044: 0.00%\n","n04399382: 66.67%\n","n04404412: 0.00%\n","n04409515: 0.00%\n","n04417672: 25.00%\n","n04418357: 0.00%\n","n04423845: 0.00%\n","n04428191: 25.00%\n","n04429376: 0.00%\n","n04435653: 0.00%\n","n04442312: 0.00%\n","n04443257: 33.33%\n","n04447861: 0.00%\n","n04456115: 25.00%\n","n04458633: 33.33%\n","n04461696: 0.00%\n","n04462240: 0.00%\n","n04465501: 0.00%\n","n04467665: 0.00%\n","n04476259: 0.00%\n","n04479046: 0.00%\n","n04482393: 0.00%\n","n04483307: 0.00%\n","n04485082: 0.00%\n","n04486054: 0.00%\n","n04487081: 0.00%\n","n04487394: 0.00%\n","n04493381: 25.00%\n","n04501370: 0.00%\n","n04505470: 25.00%\n","n04507155: 0.00%\n","n04509417: 0.00%\n","n04515003: 20.00%\n","n04517823: 25.00%\n","n04522168: 0.00%\n","n04523525: 33.33%\n","n04525038: 0.00%\n","n04525305: 50.00%\n","n04532106: 0.00%\n","n04532670: 66.67%\n","n04536866: 0.00%\n","n04540053: 0.00%\n","n04542943: 33.33%\n","n04548280: 0.00%\n","n04548362: 0.00%\n","n04550184: 20.00%\n","n04552348: 20.00%\n","n04553703: 16.67%\n","n04554684: 0.00%\n","n04557648: 0.00%\n","n04560804: 0.00%\n","n04562935: 50.00%\n","n04579145: 0.00%\n","n04579432: 23.08%\n","n04584207: 14.29%\n","n04589890: 33.33%\n","n04590129: 0.00%\n","n04591157: 0.00%\n","n04591713: 0.00%\n","n04592741: 20.00%\n","n04596742: 33.33%\n","n04597913: 0.00%\n","n04599235: 0.00%\n","n04604644: 0.00%\n","n04606251: 20.00%\n","n04612504: 0.00%\n","n04613696: 0.00%\n","n06359193: 33.33%\n","n06596364: 0.00%\n","n06785654: 50.00%\n","n06794110: 0.00%\n","n06874185: 0.00%\n","n07248320: 0.00%\n","n07565083: 40.00%\n","n07579787: 0.00%\n","n07583066: 0.00%\n","n07584110: 25.00%\n","n07590611: 0.00%\n","n07613480: 0.00%\n","n07614500: 0.00%\n","n07615774: 0.00%\n","n07684084: 0.00%\n","n07693725: 0.00%\n","n07695742: 33.33%\n","n07697313: 0.00%\n","n07697537: 0.00%\n","n07711569: 100.00%\n","n07714571: 0.00%\n","n07714990: 25.00%\n","n07715103: 20.00%\n","n07716358: 33.33%\n","n07716906: 0.00%\n","n07717410: 0.00%\n","n07717556: 0.00%\n","n07718472: 0.00%\n","n07718747: 0.00%\n","n07720875: 0.00%\n","n07730033: 33.33%\n","n07734744: 0.00%\n","n07742313: 28.57%\n","n07745940: 20.00%\n","n07747607: 50.00%\n","n07749582: 25.00%\n","n07753113: 0.00%\n","n07753275: 0.00%\n","n07753592: 33.33%\n","n07754684: 0.00%\n","n07760859: 0.00%\n","n07768694: 40.00%\n","n07802026: 33.33%\n","n07831146: 0.00%\n","n07836838: 0.00%\n","n07860988: 0.00%\n","n07871810: 0.00%\n","n07873807: 0.00%\n","n07875152: 0.00%\n","n07880968: 0.00%\n","n07892512: 0.00%\n","n07920052: 25.00%\n","n07930864: 50.00%\n","n07932039: 0.00%\n","n09193705: 0.00%\n","n09229709: 0.00%\n","n09246464: 25.00%\n","n09256479: 0.00%\n","n09288635: 75.00%\n","n09332890: 0.00%\n","n09399592: 0.00%\n","n09421951: 25.00%\n","n09428293: 0.00%\n","n09468604: 33.33%\n","n09472597: 0.00%\n","n09835506: 33.33%\n","n10148035: 0.00%\n","n10565667: 25.00%\n","n11879895: 20.00%\n","n11939491: 25.00%\n","n12057211: 75.00%\n","n12144580: 0.00%\n","n12267677: 0.00%\n","n12620546: 25.00%\n","n12768682: 0.00%\n","n12985857: 0.00%\n","n12998815: 50.00%\n","n13037406: 33.33%\n","n13040303: 25.00%\n","n13044778: 33.33%\n","n13052670: 33.33%\n","n13054560: 33.33%\n","n13133613: 50.00%\n","n15075141: 0.00%\n","Model saved as resnet50_imagenet_last_epoch.pth\n"]},{"name":"stderr","output_type":"stream","text":["\n"]}],"source":["from torch.optim.lr_scheduler import OneCycleLR\n","\n","# Define the loss function and optimizer\n","criterion = torch.nn.CrossEntropyLoss()\n","optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)\n","\n","scheduler = OneCycleLR(\n"," optimizer,\n"," max_lr = best_lr,\n"," steps_per_epoch=len(train_loader),\n"," epochs=num_epochs,\n"," pct_start=5/num_epochs,\n"," div_factor=100,\n"," three_phase=False,\n"," final_div_factor=100,\n"," anneal_strategy='linear'\n",")\n","\n","# Function to evaluate the model\n","def evaluate_model(model, val_loader, criterion):\n"," model.eval()\n"," val_loss = 0.0\n"," correct = 0\n"," total = 0\n"," class_correct = [0] * len(val_dataset.classes)\n"," class_total = [0] * len(val_dataset.classes)\n"," \n"," with torch.no_grad():\n"," for inputs, labels in tqdm(val_loader, desc=\"Validating\"):\n"," inputs, labels = inputs.to(device), labels.to(device)\n"," \n"," outputs = model(inputs)\n"," loss = criterion(outputs, labels)\n"," val_loss += loss.item()\n","\n"," _, predicted = torch.max(outputs, 1)\n"," correct += (predicted == labels).sum().item()\n"," total += labels.size(0)\n","\n"," for i in range(len(labels)):\n"," label = labels[i]\n"," class_correct[label] += (predicted[i] == label).item()\n"," class_total[label] += 1\n","\n"," val_loss /= len(val_loader)\n"," accuracy = 100.0 * correct / total\n"," per_class_accuracy = {\n"," val_dataset.classes[i]: 100.0 * class_correct[i] / class_total[i]\n"," for i in range(len(val_dataset.classes))\n"," if class_total[i] > 0\n"," }\n"," return val_loss, accuracy, per_class_accuracy\n","\n","import os\n","\n","# Directory to save checkpoints\n","checkpoint_dir = \"checkpoints\"\n","os.makedirs(checkpoint_dir, exist_ok=True)\n","\n","# Train the model with checkpoint saving every 50 epochs\n","print(f'Training the model on ImageNet')\n","for epoch in range(num_epochs):\n"," model.train()\n"," running_loss = 0.0\n"," correct = 0\n"," total = 0\n","\n"," for inputs, labels in tqdm(train_loader, desc=f\"Epoch {epoch+1}/{num_epochs}\"):\n"," inputs, labels = inputs.to(device), labels.to(device)\n","\n"," # Zero out the optimizer\n"," optimizer.zero_grad()\n","\n"," # Forward pass\n"," outputs = model(inputs)\n"," loss = criterion(outputs, labels)\n","\n"," # Backward pass\n"," loss.backward()\n"," optimizer.step()\n","\n"," scheduler.step()\n","\n"," running_loss += loss.item()\n","\n"," # Calculate accuracy during training\n"," _, predicted = torch.max(outputs, 1)\n"," correct += (predicted == labels).sum().item()\n"," total += labels.size(0)\n","\n"," # Average loss and accuracy for the epoch\n"," train_loss = running_loss / len(train_loader)\n"," train_accuracy = 100.0 * correct / total\n","\n"," print(f\"Epoch {epoch+1}/{num_epochs} - Training Loss: {train_loss:.4f}, Training Accuracy: {train_accuracy:.2f}%\")\n","\n"," # Save a checkpoint every 50 epochs\n"," if (epoch + 1) % 50 == 0:\n"," # Format accuracy to 3 digits (e.g., 99.9 -> 999, 0.12 -> 012)\n"," acc_str = f\"{int(train_accuracy):03d}\"\n"," checkpoint_path = os.path.join(checkpoint_dir, f\"epoch{epoch}_acc{acc_str}_bs{batch_size}.pth\")\n","\n"," checkpoint = {\n"," 'epoch': epoch + 1, # Current epoch number\n"," 'model_state_dict': model.state_dict(),\n"," 'optimizer_state_dict': optimizer.state_dict(),\n"," 'scheduler_state_dict': scheduler.state_dict(),\n"," 'loss': train_loss\n"," }\n","\n"," torch.save(checkpoint, checkpoint_path)\n"," print(f\"Checkpoint saved at epoch {epoch + 1} with accuracy {train_accuracy:.2f}% at {checkpoint_path}\")\n","\n","# Run validation after all epochs\n","print(f\"Validating the model on unseen data after training...\")\n","val_loss, val_accuracy, per_class_accuracy = evaluate_model(model, val_loader, criterion)\n","print(f\"Validation Loss: {val_loss:.4f}, Validation Accuracy: {val_accuracy:.2f}%\")\n","print(\"Per-class Accuracy:\")\n","for class_name, acc in per_class_accuracy.items():\n"," print(f\"{class_name}: {acc:.2f}%\")\n","\n","# Save the final model at the end of training\n","torch.save(model.state_dict(), f\"resnet50_imagenet_bs{batch_size}_ep{num_epochs}.pth\")\n","print(\"Model saved as resnet50_imagenet_last_epoch.pth\")"]}],"metadata":{"kaggle":{"accelerator":"none","dataSources":[{"databundleVersionId":4225553,"sourceId":6799,"sourceType":"competition"},{"datasetId":547506,"sourceId":998277,"sourceType":"datasetVersion"}],"dockerImageVersionId":30823,"isGpuEnabled":false,"isInternetEnabled":true,"language":"python","sourceType":"notebook"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.10.12"}},"nbformat":4,"nbformat_minor":4}
|