Image features exercise

Complete and hand in this completed worksheet (including its outputs and any supporting code outside of the worksheet) with your assignment submission. For more details see the assignments page on the course website.

We have seen that we can achieve reasonable performance on an image classification task by training a linear classifier on the pixels of the input image. In this exercise we will show that we can improve our classification performance by training linear classifiers not on raw pixels but on features that are computed from the raw pixels.

All of your work for this exercise will be done in this notebook.


In [29]:
import random
import numpy as np
from cs231n.data_utils import load_CIFAR10
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots
plt.rcParams['image.interpolation'] = 'nearest'
plt.rcParams['image.cmap'] = 'gray'

# for auto-reloading extenrnal modules
# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython
%load_ext autoreload
%autoreload 2


The autoreload extension is already loaded. To reload it, use:
  %reload_ext autoreload

Load data

Similar to previous exercises, we will load CIFAR-10 data from disk.


In [30]:
from cs231n.features import color_histogram_hsv, hog_feature

def get_CIFAR10_data(num_training=49000, num_validation=1000, num_test=1000):
  # Load the raw CIFAR-10 data
  cifar10_dir = 'cs231n/datasets/cifar-10-batches-py'
  X_train, y_train, X_test, y_test = load_CIFAR10(cifar10_dir)
  
  # Subsample the data
  mask = range(num_training, num_training + num_validation)
  X_val = X_train[mask]
  y_val = y_train[mask]
  mask = range(num_training)
  X_train = X_train[mask]
  y_train = y_train[mask]
  mask = range(num_test)
  X_test = X_test[mask]
  y_test = y_test[mask]

  return X_train, y_train, X_val, y_val, X_test, y_test

X_train, y_train, X_val, y_val, X_test, y_test = get_CIFAR10_data()

Extract Features

For each image we will compute a Histogram of Oriented Gradients (HOG) as well as a color histogram using the hue channel in HSV color space. We form our final feature vector for each image by concatenating the HOG and color histogram feature vectors.

Roughly speaking, HOG should capture the texture of the image while ignoring color information, and the color histogram represents the color of the input image while ignoring texture. As a result, we expect that using both together ought to work better than using either alone. Verifying this assumption would be a good thing to try for the bonus section.

The hog_feature and color_histogram_hsv functions both operate on a single image and return a feature vector for that image. The extract_features function takes a set of images and a list of feature functions and evaluates each feature function on each image, storing the results in a matrix where each column is the concatenation of all feature vectors for a single image.


In [31]:
from cs231n.features import *

num_color_bins = 25 # Number of bins in the color histogram
feature_fns = [hog_feature, lambda img: color_histogram_hsv(img, nbin=num_color_bins)]
X_train_feats = extract_features(X_train, feature_fns, verbose=True)
X_val_feats = extract_features(X_val, feature_fns)
X_test_feats = extract_features(X_test, feature_fns)

# Preprocessing: Subtract the mean feature
mean_feat = np.mean(X_train_feats, axis=0, keepdims=True)
X_train_feats -= mean_feat
X_val_feats -= mean_feat
X_test_feats -= mean_feat

# Preprocessing: Divide by standard deviation. This ensures that each feature
# has roughly the same scale.
std_feat = np.std(X_train_feats, axis=0, keepdims=True)
X_train_feats /= std_feat
X_val_feats /= std_feat
X_test_feats /= std_feat

# Preprocessing: Add a bias dimension
X_train_feats = np.hstack([X_train_feats, np.ones((X_train_feats.shape[0], 1))])
X_val_feats = np.hstack([X_val_feats, np.ones((X_val_feats.shape[0], 1))])
X_test_feats = np.hstack([X_test_feats, np.ones((X_test_feats.shape[0], 1))])


Done extracting features for 1000 / 49000 images
Done extracting features for 2000 / 49000 images
Done extracting features for 3000 / 49000 images
Done extracting features for 4000 / 49000 images
Done extracting features for 5000 / 49000 images
Done extracting features for 6000 / 49000 images
Done extracting features for 7000 / 49000 images
Done extracting features for 8000 / 49000 images
Done extracting features for 9000 / 49000 images
Done extracting features for 10000 / 49000 images
Done extracting features for 11000 / 49000 images
Done extracting features for 12000 / 49000 images
Done extracting features for 13000 / 49000 images
Done extracting features for 14000 / 49000 images
Done extracting features for 15000 / 49000 images
Done extracting features for 16000 / 49000 images
Done extracting features for 17000 / 49000 images
Done extracting features for 18000 / 49000 images
Done extracting features for 19000 / 49000 images
Done extracting features for 20000 / 49000 images
Done extracting features for 21000 / 49000 images
Done extracting features for 22000 / 49000 images
Done extracting features for 23000 / 49000 images
Done extracting features for 24000 / 49000 images
Done extracting features for 25000 / 49000 images
Done extracting features for 26000 / 49000 images
Done extracting features for 27000 / 49000 images
Done extracting features for 28000 / 49000 images
Done extracting features for 29000 / 49000 images
Done extracting features for 30000 / 49000 images
Done extracting features for 31000 / 49000 images
Done extracting features for 32000 / 49000 images
Done extracting features for 33000 / 49000 images
Done extracting features for 34000 / 49000 images
Done extracting features for 35000 / 49000 images
Done extracting features for 36000 / 49000 images
Done extracting features for 37000 / 49000 images
Done extracting features for 38000 / 49000 images
Done extracting features for 39000 / 49000 images
Done extracting features for 40000 / 49000 images
Done extracting features for 41000 / 49000 images
Done extracting features for 42000 / 49000 images
Done extracting features for 43000 / 49000 images
Done extracting features for 44000 / 49000 images
Done extracting features for 45000 / 49000 images
Done extracting features for 46000 / 49000 images
Done extracting features for 47000 / 49000 images
Done extracting features for 48000 / 49000 images

Train SVM on features

Using the multiclass SVM code developed earlier in the assignment, train SVMs on top of the features extracted above; this should achieve better results than training SVMs directly on top of raw pixels.


In [17]:
# Use the validation set to tune the learning rate and regularization strength

from cs231n.classifiers.linear_classifier import LinearSVM

learning_rates = [1e-9,1e-8, 1e-7, 5e-7,1e-6] #[1e-9, 1e-8, 1e-7]
regularization_strengths = [1e3,5e3,1e4,5e4,1e5,5e5,1e6,5e6,1e7,5e7,1e8] #[1e5, 1e6, 1e7]

results = {}
best_val = -1
best_svm = None

pass
################################################################################
# TODO:                                                                        #
# Use the validation set to set the learning rate and regularization strength. #
# This should be identical to the validation that you did for the SVM; save    #
# the best trained classifer in best_svm. You might also want to play          #
# with different numbers of bins in the color histogram. If you are careful    #
# you should be able to get accuracy of near 0.44 on the validation set.       #
################################################################################
for each_learning_rate in learning_rates:
    for each_regularization_strengths in regularization_strengths:
        svm = LinearSVM()
        loss_hist = svm.train(X_train_feats, y_train, learning_rate=each_learning_rate, 
                              reg=each_regularization_strengths,
                              num_iters=2500, verbose=True)
        y_train_pred = svm.predict(X_train_feats)
        training_accuracy = np.mean(y_train == y_train_pred)
        y_val_pred = svm.predict(X_val_feats)
        validation_accuracy = np.mean(y_val == y_val_pred)
        results[(each_learning_rate,each_regularization_strengths)]=(training_accuracy,validation_accuracy)
        if best_val < validation_accuracy:
            best_val = validation_accuracy
            best_svm = svm
################################################################################
#                              END OF YOUR CODE                                #
################################################################################

# Print out results.
for lr, reg in sorted(results):
    train_accuracy, val_accuracy = results[(lr, reg)]
    print 'lr %e reg %e train accuracy: %f val accuracy: %f' % (
                lr, reg, train_accuracy, val_accuracy)
    
print 'best validation accuracy achieved during cross-validation: %f' % best_val


iteration 0 / 2500: loss 9.877117
iteration 100 / 2500: loss 9.885882
iteration 200 / 2500: loss 9.879351
iteration 300 / 2500: loss 9.888886
iteration 400 / 2500: loss 9.859621
iteration 500 / 2500: loss 9.890611
iteration 600 / 2500: loss 9.874721
iteration 700 / 2500: loss 9.885237
iteration 800 / 2500: loss 9.889188
iteration 900 / 2500: loss 9.887878
iteration 1000 / 2500: loss 9.878973
iteration 1100 / 2500: loss 9.877289
iteration 1200 / 2500: loss 9.872051
iteration 1300 / 2500: loss 9.870788
iteration 1400 / 2500: loss 9.877672
iteration 1500 / 2500: loss 9.866630
iteration 1600 / 2500: loss 9.874176
iteration 1700 / 2500: loss 9.865985
iteration 1800 / 2500: loss 9.878851
iteration 1900 / 2500: loss 9.898069
iteration 2000 / 2500: loss 9.870103
iteration 2100 / 2500: loss 9.863207
iteration 2200 / 2500: loss 9.865733
iteration 2300 / 2500: loss 9.875188
iteration 2400 / 2500: loss 9.866026
iteration 0 / 2500: loss 13.511573
iteration 100 / 2500: loss 13.515351
iteration 200 / 2500: loss 13.509300
iteration 300 / 2500: loss 13.491828
iteration 400 / 2500: loss 13.503205
iteration 500 / 2500: loss 13.486731
iteration 600 / 2500: loss 13.485873
iteration 700 / 2500: loss 13.486318
iteration 800 / 2500: loss 13.496966
iteration 900 / 2500: loss 13.498504
iteration 1000 / 2500: loss 13.466419
iteration 1100 / 2500: loss 13.489745
iteration 1200 / 2500: loss 13.453243
iteration 1300 / 2500: loss 13.460696
iteration 1400 / 2500: loss 13.436569
iteration 1500 / 2500: loss 13.453039
iteration 1600 / 2500: loss 13.442180
iteration 1700 / 2500: loss 13.451906
iteration 1800 / 2500: loss 13.430164
iteration 1900 / 2500: loss 13.435933
iteration 2000 / 2500: loss 13.423399
iteration 2100 / 2500: loss 13.427207
iteration 2200 / 2500: loss 13.432759
iteration 2300 / 2500: loss 13.418653
iteration 2400 / 2500: loss 13.404438
iteration 0 / 2500: loss 17.980668
iteration 100 / 2500: loss 17.934220
iteration 200 / 2500: loss 17.918304
iteration 300 / 2500: loss 17.901295
iteration 400 / 2500: loss 17.881012
iteration 500 / 2500: loss 17.890556
iteration 600 / 2500: loss 17.847843
iteration 700 / 2500: loss 17.847766
iteration 800 / 2500: loss 17.819575
iteration 900 / 2500: loss 17.791787
iteration 1000 / 2500: loss 17.785904
iteration 1100 / 2500: loss 17.782721
iteration 1200 / 2500: loss 17.744800
iteration 1300 / 2500: loss 17.723074
iteration 1400 / 2500: loss 17.717063
iteration 1500 / 2500: loss 17.696180
iteration 1600 / 2500: loss 17.694611
iteration 1700 / 2500: loss 17.664782
iteration 1800 / 2500: loss 17.653707
iteration 1900 / 2500: loss 17.622101
iteration 2000 / 2500: loss 17.607816
iteration 2100 / 2500: loss 17.603645
iteration 2200 / 2500: loss 17.568790
iteration 2300 / 2500: loss 17.554497
iteration 2400 / 2500: loss 17.545628
iteration 0 / 2500: loss 56.377779
iteration 100 / 2500: loss 55.916463
iteration 200 / 2500: loss 55.438132
iteration 300 / 2500: loss 54.972555
iteration 400 / 2500: loss 54.531724
iteration 500 / 2500: loss 54.075198
iteration 600 / 2500: loss 53.634219
iteration 700 / 2500: loss 53.199118
iteration 800 / 2500: loss 52.737168
iteration 900 / 2500: loss 52.318938
iteration 1000 / 2500: loss 51.881018
iteration 1100 / 2500: loss 51.442462
iteration 1200 / 2500: loss 51.032827
iteration 1300 / 2500: loss 50.625826
iteration 1400 / 2500: loss 50.206910
iteration 1500 / 2500: loss 49.771618
iteration 1600 / 2500: loss 49.385005
iteration 1700 / 2500: loss 48.976332
iteration 1800 / 2500: loss 48.568835
iteration 1900 / 2500: loss 48.191745
iteration 2000 / 2500: loss 47.798805
iteration 2100 / 2500: loss 47.421058
iteration 2200 / 2500: loss 47.013082
iteration 2300 / 2500: loss 46.650196
iteration 2400 / 2500: loss 46.269627
iteration 0 / 2500: loss 103.479746
iteration 100 / 2500: loss 101.613608
iteration 200 / 2500: loss 99.775380
iteration 300 / 2500: loss 97.969906
iteration 400 / 2500: loss 96.218013
iteration 500 / 2500: loss 94.494648
iteration 600 / 2500: loss 92.783401
iteration 700 / 2500: loss 91.147207
iteration 800 / 2500: loss 89.519226
iteration 900 / 2500: loss 87.920565
iteration 1000 / 2500: loss 86.342914
iteration 1100 / 2500: loss 84.840833
iteration 1200 / 2500: loss 83.331564
iteration 1300 / 2500: loss 81.858975
iteration 1400 / 2500: loss 80.397611
iteration 1500 / 2500: loss 78.990206
iteration 1600 / 2500: loss 77.605011
iteration 1700 / 2500: loss 76.236975
iteration 1800 / 2500: loss 74.921542
iteration 1900 / 2500: loss 73.606194
iteration 2000 / 2500: loss 72.330122
iteration 2100 / 2500: loss 71.080937
iteration 2200 / 2500: loss 69.861892
iteration 2300 / 2500: loss 68.651949
iteration 2400 / 2500: loss 67.466970
iteration 0 / 2500: loss 448.012138
iteration 100 / 2500: loss 406.240663
iteration 200 / 2500: loss 368.410346
iteration 300 / 2500: loss 334.205620
iteration 400 / 2500: loss 303.257082
iteration 500 / 2500: loss 275.243913
iteration 600 / 2500: loss 249.900595
iteration 700 / 2500: loss 226.965362
iteration 800 / 2500: loss 206.216844
iteration 900 / 2500: loss 187.445608
iteration 1000 / 2500: loss 170.465760
iteration 1100 / 2500: loss 155.107470
iteration 1200 / 2500: loss 141.183861
iteration 1300 / 2500: loss 128.608919
iteration 1400 / 2500: loss 117.220190
iteration 1500 / 2500: loss 106.920384
iteration 1600 / 2500: loss 97.592855
iteration 1700 / 2500: loss 89.165612
iteration 1800 / 2500: loss 81.534403
iteration 1900 / 2500: loss 74.626879
iteration 2000 / 2500: loss 68.387700
iteration 2100 / 2500: loss 62.730568
iteration 2200 / 2500: loss 57.622351
iteration 2300 / 2500: loss 52.994138
iteration 2400 / 2500: loss 48.802673
iteration 0 / 2500: loss 966.909735
iteration 100 / 2500: loss 793.201272
iteration 200 / 2500: loss 650.989332
iteration 300 / 2500: loss 534.560867
iteration 400 / 2500: loss 439.243681
iteration 500 / 2500: loss 361.208298
iteration 600 / 2500: loss 297.343401
iteration 700 / 2500: loss 245.042568
iteration 800 / 2500: loss 202.248079
iteration 900 / 2500: loss 167.194747
iteration 1000 / 2500: loss 138.505644
iteration 1100 / 2500: loss 115.021150
iteration 1200 / 2500: loss 95.795801
iteration 1300 / 2500: loss 80.055210
iteration 1400 / 2500: loss 67.167717
iteration 1500 / 2500: loss 56.618188
iteration 1600 / 2500: loss 47.984830
iteration 1700 / 2500: loss 40.913452
iteration 1800 / 2500: loss 35.126499
iteration 1900 / 2500: loss 30.386765
iteration 2000 / 2500: loss 26.510040
iteration 2100 / 2500: loss 23.336760
iteration 2200 / 2500: loss 20.734214
iteration 2300 / 2500: loss 18.607717
iteration 2400 / 2500: loss 16.865641
iteration 0 / 2500: loss 4857.851643
iteration 100 / 2500: loss 1788.316172
iteration 200 / 2500: loss 661.934869
iteration 300 / 2500: loss 248.599826
iteration 400 / 2500: loss 96.922333
iteration 500 / 2500: loss 41.264375
iteration 600 / 2500: loss 20.839972
iteration 700 / 2500: loss 13.344579
iteration 800 / 2500: loss 10.594246
iteration 900 / 2500: loss 9.584926
iteration 1000 / 2500: loss 9.214740
iteration 1100 / 2500: loss 9.078748
iteration 1200 / 2500: loss 9.028926
iteration 1300 / 2500: loss 9.010590
iteration 1400 / 2500: loss 9.003889
iteration 1500 / 2500: loss 9.001421
iteration 1600 / 2500: loss 9.000518
iteration 1700 / 2500: loss 9.000185
iteration 1800 / 2500: loss 9.000064
iteration 1900 / 2500: loss 9.000018
iteration 2000 / 2500: loss 9.000001
iteration 2100 / 2500: loss 8.999996
iteration 2200 / 2500: loss 8.999993
iteration 2300 / 2500: loss 8.999993
iteration 2400 / 2500: loss 8.999992
iteration 0 / 2500: loss 8886.914338
iteration 100 / 2500: loss 1198.456973
iteration 200 / 2500: loss 168.365479
iteration 300 / 2500: loss 30.351917
iteration 400 / 2500: loss 11.860905
iteration 500 / 2500: loss 9.383201
iteration 600 / 2500: loss 9.051329
iteration 700 / 2500: loss 9.006856
iteration 800 / 2500: loss 9.000916
iteration 900 / 2500: loss 9.000118
iteration 1000 / 2500: loss 9.000013
iteration 1100 / 2500: loss 8.999999
iteration 1200 / 2500: loss 8.999996
iteration 1300 / 2500: loss 8.999996
iteration 1400 / 2500: loss 8.999995
iteration 1500 / 2500: loss 8.999997
iteration 1600 / 2500: loss 8.999997
iteration 1700 / 2500: loss 8.999996
iteration 1800 / 2500: loss 8.999996
iteration 1900 / 2500: loss 8.999996
iteration 2000 / 2500: loss 8.999996
iteration 2100 / 2500: loss 8.999996
iteration 2200 / 2500: loss 8.999996
iteration 2300 / 2500: loss 8.999997
iteration 2400 / 2500: loss 8.999996
iteration 0 / 2500: loss 43857.170784
iteration 100 / 2500: loss 10.536978
iteration 200 / 2500: loss 9.000053
iteration 300 / 2500: loss 8.999999
iteration 400 / 2500: loss 8.999999
iteration 500 / 2500: loss 8.999999
iteration 600 / 2500: loss 8.999999
iteration 700 / 2500: loss 8.999999
iteration 800 / 2500: loss 8.999999
iteration 900 / 2500: loss 8.999999
iteration 1000 / 2500: loss 8.999999
iteration 1100 / 2500: loss 8.999999
iteration 1200 / 2500: loss 8.999999
iteration 1300 / 2500: loss 8.999999
iteration 1400 / 2500: loss 8.999999
iteration 1500 / 2500: loss 8.999999
iteration 1600 / 2500: loss 8.999999
iteration 1700 / 2500: loss 8.999999
iteration 1800 / 2500: loss 8.999999
iteration 1900 / 2500: loss 8.999999
iteration 2000 / 2500: loss 8.999999
iteration 2100 / 2500: loss 8.999999
iteration 2200 / 2500: loss 8.999999
iteration 2300 / 2500: loss 8.999999
iteration 2400 / 2500: loss 8.999999
iteration 0 / 2500: loss 88227.344824
iteration 100 / 2500: loss 9.000062
iteration 200 / 2500: loss 9.000000
iteration 300 / 2500: loss 9.000000
iteration 400 / 2500: loss 9.000000
iteration 500 / 2500: loss 9.000000
iteration 600 / 2500: loss 9.000000
iteration 700 / 2500: loss 9.000000
iteration 800 / 2500: loss 9.000000
iteration 900 / 2500: loss 9.000000
iteration 1000 / 2500: loss 9.000000
iteration 1100 / 2500: loss 9.000000
iteration 1200 / 2500: loss 9.000000
iteration 1300 / 2500: loss 9.000000
iteration 1400 / 2500: loss 9.000000
iteration 1500 / 2500: loss 9.000000
iteration 1600 / 2500: loss 9.000000
iteration 1700 / 2500: loss 9.000000
iteration 1800 / 2500: loss 9.000000
iteration 1900 / 2500: loss 9.000000
iteration 2000 / 2500: loss 9.000000
iteration 2100 / 2500: loss 9.000000
iteration 2200 / 2500: loss 9.000000
iteration 2300 / 2500: loss 9.000000
iteration 2400 / 2500: loss 9.000000
iteration 0 / 2500: loss 9.890637
iteration 100 / 2500: loss 9.892354
iteration 200 / 2500: loss 9.896214
iteration 300 / 2500: loss 9.890789
iteration 400 / 2500: loss 9.869569
iteration 500 / 2500: loss 9.893592
iteration 600 / 2500: loss 9.881267
iteration 700 / 2500: loss 9.875199
iteration 800 / 2500: loss 9.876990
iteration 900 / 2500: loss 9.889738
iteration 1000 / 2500: loss 9.880195
iteration 1100 / 2500: loss 9.864841
iteration 1200 / 2500: loss 9.870574
iteration 1300 / 2500: loss 9.872738
iteration 1400 / 2500: loss 9.872382
iteration 1500 / 2500: loss 9.862372
iteration 1600 / 2500: loss 9.862933
iteration 1700 / 2500: loss 9.871744
iteration 1800 / 2500: loss 9.863936
iteration 1900 / 2500: loss 9.845892
iteration 2000 / 2500: loss 9.857462
iteration 2100 / 2500: loss 9.853372
iteration 2200 / 2500: loss 9.866888
iteration 2300 / 2500: loss 9.855524
iteration 2400 / 2500: loss 9.850894
iteration 0 / 2500: loss 13.460900
iteration 100 / 2500: loss 13.396864
iteration 200 / 2500: loss 13.365185
iteration 300 / 2500: loss 13.329876
iteration 400 / 2500: loss 13.284332
iteration 500 / 2500: loss 13.232984
iteration 600 / 2500: loss 13.185608
iteration 700 / 2500: loss 13.167510
iteration 800 / 2500: loss 13.110023
iteration 900 / 2500: loss 13.078919
iteration 1000 / 2500: loss 13.022997
iteration 1100 / 2500: loss 12.984983
iteration 1200 / 2500: loss 12.948907
iteration 1300 / 2500: loss 12.917724
iteration 1400 / 2500: loss 12.867160
iteration 1500 / 2500: loss 12.822979
iteration 1600 / 2500: loss 12.792499
iteration 1700 / 2500: loss 12.763298
iteration 1800 / 2500: loss 12.711233
iteration 1900 / 2500: loss 12.697904
iteration 2000 / 2500: loss 12.653206
iteration 2100 / 2500: loss 12.611694
iteration 2200 / 2500: loss 12.573089
iteration 2300 / 2500: loss 12.544261
iteration 2400 / 2500: loss 12.502499
iteration 0 / 2500: loss 18.312442
iteration 100 / 2500: loss 18.142940
iteration 200 / 2500: loss 17.943920
iteration 300 / 2500: loss 17.786495
iteration 400 / 2500: loss 17.585903
iteration 500 / 2500: loss 17.438882
iteration 600 / 2500: loss 17.264402
iteration 700 / 2500: loss 17.102599
iteration 800 / 2500: loss 16.929433
iteration 900 / 2500: loss 16.763850
iteration 1000 / 2500: loss 16.638976
iteration 1100 / 2500: loss 16.468926
iteration 1200 / 2500: loss 16.340209
iteration 1300 / 2500: loss 16.191656
iteration 1400 / 2500: loss 16.044800
iteration 1500 / 2500: loss 15.906658
iteration 1600 / 2500: loss 15.771771
iteration 1700 / 2500: loss 15.612659
iteration 1800 / 2500: loss 15.495038
iteration 1900 / 2500: loss 15.377266
iteration 2000 / 2500: loss 15.233207
iteration 2100 / 2500: loss 15.119882
iteration 2200 / 2500: loss 14.994262
iteration 2300 / 2500: loss 14.890899
iteration 2400 / 2500: loss 14.758902
iteration 0 / 2500: loss 53.267030
iteration 100 / 2500: loss 49.052300
iteration 200 / 2500: loss 45.226324
iteration 300 / 2500: loss 41.798933
iteration 400 / 2500: loss 38.675286
iteration 500 / 2500: loss 35.831826
iteration 600 / 2500: loss 33.286031
iteration 700 / 2500: loss 30.975919
iteration 800 / 2500: loss 28.886016
iteration 900 / 2500: loss 26.986198
iteration 1000 / 2500: loss 25.284923
iteration 1100 / 2500: loss 23.725250
iteration 1200 / 2500: loss 22.321547
iteration 1300 / 2500: loss 21.055178
iteration 1400 / 2500: loss 19.911614
iteration 1500 / 2500: loss 18.868213
iteration 1600 / 2500: loss 17.934967
iteration 1700 / 2500: loss 17.085506
iteration 1800 / 2500: loss 16.309097
iteration 1900 / 2500: loss 15.622044
iteration 2000 / 2500: loss 14.981530
iteration 2100 / 2500: loss 14.419450
iteration 2200 / 2500: loss 13.903839
iteration 2300 / 2500: loss 13.434990
iteration 2400 / 2500: loss 13.017223
iteration 0 / 2500: loss 104.843968
iteration 100 / 2500: loss 87.463778
iteration 200 / 2500: loss 73.225101
iteration 300 / 2500: loss 61.589779
iteration 400 / 2500: loss 52.052951
iteration 500 / 2500: loss 44.244468
iteration 600 / 2500: loss 37.856079
iteration 700 / 2500: loss 32.618045
iteration 800 / 2500: loss 28.339114
iteration 900 / 2500: loss 24.833074
iteration 1000 / 2500: loss 21.958471
iteration 1100 / 2500: loss 19.607948
iteration 1200 / 2500: loss 17.685404
iteration 1300 / 2500: loss 16.106443
iteration 1400 / 2500: loss 14.819607
iteration 1500 / 2500: loss 13.767570
iteration 1600 / 2500: loss 12.899657
iteration 1700 / 2500: loss 12.195937
iteration 1800 / 2500: loss 11.614254
iteration 1900 / 2500: loss 11.141024
iteration 2000 / 2500: loss 10.753024
iteration 2100 / 2500: loss 10.434553
iteration 2200 / 2500: loss 10.173140
iteration 2300 / 2500: loss 9.960794
iteration 2400 / 2500: loss 9.786133
iteration 0 / 2500: loss 457.772902
iteration 100 / 2500: loss 173.677046
iteration 200 / 2500: loss 69.431367
iteration 300 / 2500: loss 31.172325
iteration 400 / 2500: loss 17.138874
iteration 500 / 2500: loss 11.985615
iteration 600 / 2500: loss 10.095427
iteration 700 / 2500: loss 9.401263
iteration 800 / 2500: loss 9.147635
iteration 900 / 2500: loss 9.054138
iteration 1000 / 2500: loss 9.019835
iteration 1100 / 2500: loss 9.007224
iteration 1200 / 2500: loss 9.002647
iteration 1300 / 2500: loss 9.000872
iteration 1400 / 2500: loss 9.000278
iteration 1500 / 2500: loss 9.000042
iteration 1600 / 2500: loss 8.999962
iteration 1700 / 2500: loss 8.999939
iteration 1800 / 2500: loss 8.999933
iteration 1900 / 2500: loss 8.999916
iteration 2000 / 2500: loss 8.999908
iteration 2100 / 2500: loss 8.999919
iteration 2200 / 2500: loss 8.999922
iteration 2300 / 2500: loss 8.999938
iteration 2400 / 2500: loss 8.999925
iteration 0 / 2500: loss 895.144389
iteration 100 / 2500: loss 127.728113
iteration 200 / 2500: loss 24.907806
iteration 300 / 2500: loss 11.131300
iteration 400 / 2500: loss 9.285528
iteration 500 / 2500: loss 9.038127
iteration 600 / 2500: loss 9.005055
iteration 700 / 2500: loss 9.000644
iteration 800 / 2500: loss 9.000060
iteration 900 / 2500: loss 8.999963
iteration 1000 / 2500: loss 8.999963
iteration 1100 / 2500: loss 8.999965
iteration 1200 / 2500: loss 8.999964
iteration 1300 / 2500: loss 8.999963
iteration 1400 / 2500: loss 8.999965
iteration 1500 / 2500: loss 8.999963
iteration 1600 / 2500: loss 8.999962
iteration 1700 / 2500: loss 8.999963
iteration 1800 / 2500: loss 8.999957
iteration 1900 / 2500: loss 8.999962
iteration 2000 / 2500: loss 8.999966
iteration 2100 / 2500: loss 8.999958
iteration 2200 / 2500: loss 8.999968
iteration 2300 / 2500: loss 8.999956
iteration 2400 / 2500: loss 8.999959
iteration 0 / 2500: loss 4584.040810
iteration 100 / 2500: loss 9.160313
iteration 200 / 2500: loss 8.999998
iteration 300 / 2500: loss 8.999992
iteration 400 / 2500: loss 8.999993
iteration 500 / 2500: loss 8.999993
iteration 600 / 2500: loss 8.999994
iteration 700 / 2500: loss 8.999992
iteration 800 / 2500: loss 8.999992
iteration 900 / 2500: loss 8.999992
iteration 1000 / 2500: loss 8.999993
iteration 1100 / 2500: loss 8.999992
iteration 1200 / 2500: loss 8.999992
iteration 1300 / 2500: loss 8.999992
iteration 1400 / 2500: loss 8.999993
iteration 1500 / 2500: loss 8.999992
iteration 1600 / 2500: loss 8.999993
iteration 1700 / 2500: loss 8.999993
iteration 1800 / 2500: loss 8.999993
iteration 1900 / 2500: loss 8.999993
iteration 2000 / 2500: loss 8.999994
iteration 2100 / 2500: loss 8.999993
iteration 2200 / 2500: loss 8.999992
iteration 2300 / 2500: loss 8.999991
iteration 2400 / 2500: loss 8.999994
iteration 0 / 2500: loss 9410.409410
iteration 100 / 2500: loss 9.000003
iteration 200 / 2500: loss 8.999996
iteration 300 / 2500: loss 8.999996
iteration 400 / 2500: loss 8.999996
iteration 500 / 2500: loss 8.999996
iteration 600 / 2500: loss 8.999996
iteration 700 / 2500: loss 8.999997
iteration 800 / 2500: loss 8.999996
iteration 900 / 2500: loss 8.999997
iteration 1000 / 2500: loss 8.999996
iteration 1100 / 2500: loss 8.999996
iteration 1200 / 2500: loss 8.999996
iteration 1300 / 2500: loss 8.999996
iteration 1400 / 2500: loss 8.999997
iteration 1500 / 2500: loss 8.999997
iteration 1600 / 2500: loss 8.999996
iteration 1700 / 2500: loss 8.999996
iteration 1800 / 2500: loss 8.999996
iteration 1900 / 2500: loss 8.999996
iteration 2000 / 2500: loss 8.999997
iteration 2100 / 2500: loss 8.999996
iteration 2200 / 2500: loss 8.999996
iteration 2300 / 2500: loss 8.999996
iteration 2400 / 2500: loss 8.999998
iteration 0 / 2500: loss 44682.661305
iteration 100 / 2500: loss 9.000000
iteration 200 / 2500: loss 9.000000
iteration 300 / 2500: loss 8.999999
iteration 400 / 2500: loss 8.999999
iteration 500 / 2500: loss 8.999999
iteration 600 / 2500: loss 9.000000
iteration 700 / 2500: loss 8.999999
iteration 800 / 2500: loss 8.999999
iteration 900 / 2500: loss 8.999999
iteration 1000 / 2500: loss 9.000000
iteration 1100 / 2500: loss 9.000000
iteration 1200 / 2500: loss 9.000000
iteration 1300 / 2500: loss 8.999999
iteration 1400 / 2500: loss 9.000000
iteration 1500 / 2500: loss 8.999999
iteration 1600 / 2500: loss 8.999999
iteration 1700 / 2500: loss 8.999999
iteration 1800 / 2500: loss 9.000000
iteration 1900 / 2500: loss 8.999999
iteration 2000 / 2500: loss 8.999999
iteration 2100 / 2500: loss 9.000000
iteration 2200 / 2500: loss 9.000000
iteration 2300 / 2500: loss 8.999999
iteration 2400 / 2500: loss 9.000000
iteration 0 / 2500: loss 87462.981825
iteration 100 / 2500: loss 9.000000
iteration 200 / 2500: loss 9.000000
iteration 300 / 2500: loss 9.000000
iteration 400 / 2500: loss 9.000000
iteration 500 / 2500: loss 9.000000
iteration 600 / 2500: loss 9.000000
iteration 700 / 2500: loss 9.000000
iteration 800 / 2500: loss 9.000000
iteration 900 / 2500: loss 9.000000
iteration 1000 / 2500: loss 9.000000
iteration 1100 / 2500: loss 9.000000
iteration 1200 / 2500: loss 9.000000
iteration 1300 / 2500: loss 9.000000
iteration 1400 / 2500: loss 9.000000
iteration 1500 / 2500: loss 9.000000
iteration 1600 / 2500: loss 9.000000
iteration 1700 / 2500: loss 9.000000
iteration 1800 / 2500: loss 9.000000
iteration 1900 / 2500: loss 9.000000
iteration 2000 / 2500: loss 9.000000
iteration 2100 / 2500: loss 9.000000
iteration 2200 / 2500: loss 9.000000
iteration 2300 / 2500: loss 9.000000
iteration 2400 / 2500: loss 9.000000
iteration 0 / 2500: loss 9.874616
iteration 100 / 2500: loss 9.840335
iteration 200 / 2500: loss 9.849216
iteration 300 / 2500: loss 9.810248
iteration 400 / 2500: loss 9.794678
iteration 500 / 2500: loss 9.783783
iteration 600 / 2500: loss 9.763658
iteration 700 / 2500: loss 9.744733
iteration 800 / 2500: loss 9.750207
iteration 900 / 2500: loss 9.733798
iteration 1000 / 2500: loss 9.708673
iteration 1100 / 2500: loss 9.709858
iteration 1200 / 2500: loss 9.682577
iteration 1300 / 2500: loss 9.665802
iteration 1400 / 2500: loss 9.656270
iteration 1500 / 2500: loss 9.636154
iteration 1600 / 2500: loss 9.626769
iteration 1700 / 2500: loss 9.615868
iteration 1800 / 2500: loss 9.605840
iteration 1900 / 2500: loss 9.589234
iteration 2000 / 2500: loss 9.570564
iteration 2100 / 2500: loss 9.574025
iteration 2200 / 2500: loss 9.564579
iteration 2300 / 2500: loss 9.541519
iteration 2400 / 2500: loss 9.517801
iteration 0 / 2500: loss 13.222065
iteration 100 / 2500: loss 12.827480
iteration 200 / 2500: loss 12.446309
iteration 300 / 2500: loss 12.133947
iteration 400 / 2500: loss 11.837875
iteration 500 / 2500: loss 11.564721
iteration 600 / 2500: loss 11.314170
iteration 700 / 2500: loss 11.084854
iteration 800 / 2500: loss 10.899649
iteration 900 / 2500: loss 10.702988
iteration 1000 / 2500: loss 10.546570
iteration 1100 / 2500: loss 10.403666
iteration 1200 / 2500: loss 10.262527
iteration 1300 / 2500: loss 10.148132
iteration 1400 / 2500: loss 10.036218
iteration 1500 / 2500: loss 9.933217
iteration 1600 / 2500: loss 9.844624
iteration 1700 / 2500: loss 9.766376
iteration 1800 / 2500: loss 9.693194
iteration 1900 / 2500: loss 9.631676
iteration 2000 / 2500: loss 9.566964
iteration 2100 / 2500: loss 9.512770
iteration 2200 / 2500: loss 9.459546
iteration 2300 / 2500: loss 9.416001
iteration 2400 / 2500: loss 9.374763
iteration 0 / 2500: loss 18.479931
iteration 100 / 2500: loss 16.764413
iteration 200 / 2500: loss 15.337518
iteration 300 / 2500: loss 14.200988
iteration 400 / 2500: loss 13.255896
iteration 500 / 2500: loss 12.484596
iteration 600 / 2500: loss 11.851445
iteration 700 / 2500: loss 11.334897
iteration 800 / 2500: loss 10.907376
iteration 900 / 2500: loss 10.567453
iteration 1000 / 2500: loss 10.278486
iteration 1100 / 2500: loss 10.050943
iteration 1200 / 2500: loss 9.854025
iteration 1300 / 2500: loss 9.695154
iteration 1400 / 2500: loss 9.574878
iteration 1500 / 2500: loss 9.471797
iteration 1600 / 2500: loss 9.382590
iteration 1700 / 2500: loss 9.312247
iteration 1800 / 2500: loss 9.254910
iteration 1900 / 2500: loss 9.206661
iteration 2000 / 2500: loss 9.168784
iteration 2100 / 2500: loss 9.135425
iteration 2200 / 2500: loss 9.111414
iteration 2300 / 2500: loss 9.093292
iteration 2400 / 2500: loss 9.073212
iteration 0 / 2500: loss 55.314775
iteration 100 / 2500: loss 25.986264
iteration 200 / 2500: loss 15.235515
iteration 300 / 2500: loss 11.287143
iteration 400 / 2500: loss 9.838627
iteration 500 / 2500: loss 9.308243
iteration 600 / 2500: loss 9.112591
iteration 700 / 2500: loss 9.040292
iteration 800 / 2500: loss 9.014365
iteration 900 / 2500: loss 9.004728
iteration 1000 / 2500: loss 9.001188
iteration 1100 / 2500: loss 8.999938
iteration 1200 / 2500: loss 8.999512
iteration 1300 / 2500: loss 8.999271
iteration 1400 / 2500: loss 8.999350
iteration 1500 / 2500: loss 8.999049
iteration 1600 / 2500: loss 8.999131
iteration 1700 / 2500: loss 8.999132
iteration 1800 / 2500: loss 8.999226
iteration 1900 / 2500: loss 8.999225
iteration 2000 / 2500: loss 8.999193
iteration 2100 / 2500: loss 8.999269
iteration 2200 / 2500: loss 8.999211
iteration 2300 / 2500: loss 8.999213
iteration 2400 / 2500: loss 8.999026
iteration 0 / 2500: loss 97.454398
iteration 100 / 2500: loss 20.849062
iteration 200 / 2500: loss 10.586777
iteration 300 / 2500: loss 9.212383
iteration 400 / 2500: loss 9.028395
iteration 500 / 2500: loss 9.003486
iteration 600 / 2500: loss 9.000116
iteration 700 / 2500: loss 8.999683
iteration 800 / 2500: loss 8.999601
iteration 900 / 2500: loss 8.999631
iteration 1000 / 2500: loss 8.999592
iteration 1100 / 2500: loss 8.999553
iteration 1200 / 2500: loss 8.999685
iteration 1300 / 2500: loss 8.999540
iteration 1400 / 2500: loss 8.999629
iteration 1500 / 2500: loss 8.999632
iteration 1600 / 2500: loss 8.999665
iteration 1700 / 2500: loss 8.999638
iteration 1800 / 2500: loss 8.999647
iteration 1900 / 2500: loss 8.999663
iteration 2000 / 2500: loss 8.999598
iteration 2100 / 2500: loss 8.999591
iteration 2200 / 2500: loss 8.999626
iteration 2300 / 2500: loss 8.999691
iteration 2400 / 2500: loss 8.999575
iteration 0 / 2500: loss 486.728595
iteration 100 / 2500: loss 9.016655
iteration 200 / 2500: loss 8.999944
iteration 300 / 2500: loss 8.999915
iteration 400 / 2500: loss 8.999933
iteration 500 / 2500: loss 8.999933
iteration 600 / 2500: loss 8.999927
iteration 700 / 2500: loss 8.999930
iteration 800 / 2500: loss 8.999922
iteration 900 / 2500: loss 8.999902
iteration 1000 / 2500: loss 8.999922
iteration 1100 / 2500: loss 8.999926
iteration 1200 / 2500: loss 8.999922
iteration 1300 / 2500: loss 8.999939
iteration 1400 / 2500: loss 8.999926
iteration 1500 / 2500: loss 8.999924
iteration 1600 / 2500: loss 8.999930
iteration 1700 / 2500: loss 8.999933
iteration 1800 / 2500: loss 8.999927
iteration 1900 / 2500: loss 8.999927
iteration 2000 / 2500: loss 8.999926
iteration 2100 / 2500: loss 8.999923
iteration 2200 / 2500: loss 8.999915
iteration 2300 / 2500: loss 8.999906
iteration 2400 / 2500: loss 8.999910
iteration 0 / 2500: loss 883.764039
iteration 100 / 2500: loss 8.999972
iteration 200 / 2500: loss 8.999968
iteration 300 / 2500: loss 8.999956
iteration 400 / 2500: loss 8.999964
iteration 500 / 2500: loss 8.999962
iteration 600 / 2500: loss 8.999958
iteration 700 / 2500: loss 8.999963
iteration 800 / 2500: loss 8.999964
iteration 900 / 2500: loss 8.999961
iteration 1000 / 2500: loss 8.999958
iteration 1100 / 2500: loss 8.999959
iteration 1200 / 2500: loss 8.999961
iteration 1300 / 2500: loss 8.999962
iteration 1400 / 2500: loss 8.999964
iteration 1500 / 2500: loss 8.999968
iteration 1600 / 2500: loss 8.999954
iteration 1700 / 2500: loss 8.999960
iteration 1800 / 2500: loss 8.999963
iteration 1900 / 2500: loss 8.999963
iteration 2000 / 2500: loss 8.999966
iteration 2100 / 2500: loss 8.999963
iteration 2200 / 2500: loss 8.999957
iteration 2300 / 2500: loss 8.999963
iteration 2400 / 2500: loss 8.999962
iteration 0 / 2500: loss 4493.948059
iteration 100 / 2500: loss 8.999996
iteration 200 / 2500: loss 8.999995
iteration 300 / 2500: loss 8.999995
iteration 400 / 2500: loss 8.999995
iteration 500 / 2500: loss 8.999994
iteration 600 / 2500: loss 8.999996
iteration 700 / 2500: loss 8.999996
iteration 800 / 2500: loss 8.999994
iteration 900 / 2500: loss 8.999996
iteration 1000 / 2500: loss 8.999994
iteration 1100 / 2500: loss 8.999995
iteration 1200 / 2500: loss 8.999994
iteration 1300 / 2500: loss 8.999993
iteration 1400 / 2500: loss 8.999994
iteration 1500 / 2500: loss 8.999995
iteration 1600 / 2500: loss 8.999995
iteration 1700 / 2500: loss 8.999994
iteration 1800 / 2500: loss 8.999997
iteration 1900 / 2500: loss 8.999995
iteration 2000 / 2500: loss 8.999996
iteration 2100 / 2500: loss 8.999995
iteration 2200 / 2500: loss 8.999996
iteration 2300 / 2500: loss 8.999994
iteration 2400 / 2500: loss 8.999994
iteration 0 / 2500: loss 8865.361380
iteration 100 / 2500: loss 9.000000
iteration 200 / 2500: loss 9.000000
iteration 300 / 2500: loss 8.999999
iteration 400 / 2500: loss 8.999999
iteration 500 / 2500: loss 9.000000
iteration 600 / 2500: loss 8.999999
iteration 700 / 2500: loss 8.999999
iteration 800 / 2500: loss 8.999999
iteration 900 / 2500: loss 9.000000
iteration 1000 / 2500: loss 9.000000
iteration 1100 / 2500: loss 9.000000
iteration 1200 / 2500: loss 9.000000
iteration 1300 / 2500: loss 9.000000
iteration 1400 / 2500: loss 8.999999
iteration 1500 / 2500: loss 9.000000
iteration 1600 / 2500: loss 9.000001
iteration 1700 / 2500: loss 9.000001
iteration 1800 / 2500: loss 9.000000
iteration 1900 / 2500: loss 9.000000
iteration 2000 / 2500: loss 9.000000
iteration 2100 / 2500: loss 9.000000
iteration 2200 / 2500: loss 9.000001
iteration 2300 / 2500: loss 9.000000
iteration 2400 / 2500: loss 9.000001
iteration 0 / 2500: loss 41698.997898
iteration 100 / 2500: loss 107653999281752676747805425517842991931819465771050911139191602733225721428388952135794871338438029170887195925816761301073920.000000
iteration 200 / 2500: loss 277989526520873994406590457466013081875527192826379496295899427179161229283007274464828342374849484810558066896764584049868156875617391701596530193725011353429157220210764442443807990701923299507295952484500674277240326447381634506496136886353920.000000
iteration 300 / 2500: loss inf
iteration 400 / 2500: loss inf
iteration 500 / 2500: loss inf
iteration 600 / 2500: loss nan
iteration 700 / 2500: loss nan
iteration 800 / 2500: loss nan
cs231n/classifiers/linear_svm.py:95: RuntimeWarning: overflow encountered in double_scalars
  loss += 0.5 * reg * np.sum(W * W)
cs231n/classifiers/linear_svm.py:95: RuntimeWarning: overflow encountered in multiply
  loss += 0.5 * reg * np.sum(W * W)
cs231n/classifiers/linear_svm.py:115: RuntimeWarning: overflow encountered in multiply
  dW = 1/float(num_train) * dW + reg * W
cs231n/classifiers/linear_svm.py:92: RuntimeWarning: invalid value encountered in less
  class_scores[class_scores<0] = 0
cs231n/classifiers/linear_svm.py:111: RuntimeWarning: invalid value encountered in greater
  class_scores[class_scores>0] = 1  # N x C dimensional
iteration 900 / 2500: loss nan
iteration 1000 / 2500: loss nan
iteration 1100 / 2500: loss nan
iteration 1200 / 2500: loss nan
iteration 1300 / 2500: loss nan
iteration 1400 / 2500: loss nan
iteration 1500 / 2500: loss nan
iteration 1600 / 2500: loss nan
iteration 1700 / 2500: loss nan
iteration 1800 / 2500: loss nan
iteration 1900 / 2500: loss nan
iteration 2000 / 2500: loss nan
iteration 2100 / 2500: loss nan
iteration 2200 / 2500: loss nan
iteration 2300 / 2500: loss nan
iteration 2400 / 2500: loss nan
iteration 0 / 2500: loss 90681.557256
iteration 100 / 2500: loss 6397020728734461743670827431917722638322755679264625733210000088063781301088182370358986803401395901952433449367829410706202269304448183150261029489041834750919605845636274161931883003800811732992.000000
iteration 200 / 2500: loss inf
iteration 300 / 2500: loss inf
iteration 400 / 2500: loss nan
iteration 500 / 2500: loss nan
iteration 600 / 2500: loss nan
iteration 700 / 2500: loss nan
iteration 800 / 2500: loss nan
iteration 900 / 2500: loss nan
iteration 1000 / 2500: loss nan
iteration 1100 / 2500: loss nan
iteration 1200 / 2500: loss nan
iteration 1300 / 2500: loss nan
iteration 1400 / 2500: loss nan
iteration 1500 / 2500: loss nan
iteration 1600 / 2500: loss nan
iteration 1700 / 2500: loss nan
iteration 1800 / 2500: loss nan
iteration 1900 / 2500: loss nan
iteration 2000 / 2500: loss nan
iteration 2100 / 2500: loss nan
iteration 2200 / 2500: loss nan
iteration 2300 / 2500: loss nan
iteration 2400 / 2500: loss nan
iteration 0 / 2500: loss 9.934382
iteration 100 / 2500: loss 9.847263
iteration 200 / 2500: loss 9.770886
iteration 300 / 2500: loss 9.683547
iteration 400 / 2500: loss 9.609528
iteration 500 / 2500: loss 9.555699
iteration 600 / 2500: loss 9.486237
iteration 700 / 2500: loss 9.448186
iteration 800 / 2500: loss 9.407683
iteration 900 / 2500: loss 9.357459
iteration 1000 / 2500: loss 9.312764
iteration 1100 / 2500: loss 9.269219
iteration 1200 / 2500: loss 9.253608
iteration 1300 / 2500: loss 9.223894
iteration 1400 / 2500: loss 9.197620
iteration 1500 / 2500: loss 9.179166
iteration 1600 / 2500: loss 9.155161
iteration 1700 / 2500: loss 9.142533
iteration 1800 / 2500: loss 9.125533
iteration 1900 / 2500: loss 9.105006
iteration 2000 / 2500: loss 9.090342
iteration 2100 / 2500: loss 9.079785
iteration 2200 / 2500: loss 9.067660
iteration 2300 / 2500: loss 9.061743
iteration 2400 / 2500: loss 9.059050
iteration 0 / 2500: loss 13.549999
iteration 100 / 2500: loss 11.767051
iteration 200 / 2500: loss 10.673803
iteration 300 / 2500: loss 10.007700
iteration 400 / 2500: loss 9.612937
iteration 500 / 2500: loss 9.367658
iteration 600 / 2500: loss 9.218370
iteration 700 / 2500: loss 9.128089
iteration 800 / 2500: loss 9.074503
iteration 900 / 2500: loss 9.043482
iteration 1000 / 2500: loss 9.021700
iteration 1100 / 2500: loss 9.010665
iteration 1200 / 2500: loss 9.004480
iteration 1300 / 2500: loss 8.999356
iteration 1400 / 2500: loss 8.995331
iteration 1500 / 2500: loss 8.994654
iteration 1600 / 2500: loss 8.993500
iteration 1700 / 2500: loss 8.993229
iteration 1800 / 2500: loss 8.992323
iteration 1900 / 2500: loss 8.993943
iteration 2000 / 2500: loss 8.991406
iteration 2100 / 2500: loss 8.990478
iteration 2200 / 2500: loss 8.991550
iteration 2300 / 2500: loss 8.995134
iteration 2400 / 2500: loss 8.991822
iteration 0 / 2500: loss 18.070969
iteration 100 / 2500: loss 12.338894
iteration 200 / 2500: loss 10.223650
iteration 300 / 2500: loss 9.446441
iteration 400 / 2500: loss 9.162514
iteration 500 / 2500: loss 9.055663
iteration 600 / 2500: loss 9.018571
iteration 700 / 2500: loss 9.004243
iteration 800 / 2500: loss 8.998948
iteration 900 / 2500: loss 8.997255
iteration 1000 / 2500: loss 8.996308
iteration 1100 / 2500: loss 8.996473
iteration 1200 / 2500: loss 8.995246
iteration 1300 / 2500: loss 8.995916
iteration 1400 / 2500: loss 8.995769
iteration 1500 / 2500: loss 8.996432
iteration 1600 / 2500: loss 8.994349
iteration 1700 / 2500: loss 8.995878
iteration 1800 / 2500: loss 8.996063
iteration 1900 / 2500: loss 8.997125
iteration 2000 / 2500: loss 8.995533
iteration 2100 / 2500: loss 8.996617
iteration 2200 / 2500: loss 8.995959
iteration 2300 / 2500: loss 8.995471
iteration 2400 / 2500: loss 8.995378
iteration 0 / 2500: loss 54.274407
iteration 100 / 2500: loss 9.284855
iteration 200 / 2500: loss 9.000870
iteration 300 / 2500: loss 8.999166
iteration 400 / 2500: loss 8.999265
iteration 500 / 2500: loss 8.998993
iteration 600 / 2500: loss 8.999089
iteration 700 / 2500: loss 8.999200
iteration 800 / 2500: loss 8.999160
iteration 900 / 2500: loss 8.999071
iteration 1000 / 2500: loss 8.999046
iteration 1100 / 2500: loss 8.999156
iteration 1200 / 2500: loss 8.999224
iteration 1300 / 2500: loss 8.999142
iteration 1400 / 2500: loss 8.999253
iteration 1500 / 2500: loss 8.999302
iteration 1600 / 2500: loss 8.999245
iteration 1700 / 2500: loss 8.999079
iteration 1800 / 2500: loss 8.999301
iteration 1900 / 2500: loss 8.999294
iteration 2000 / 2500: loss 8.999287
iteration 2100 / 2500: loss 8.999247
iteration 2200 / 2500: loss 8.999212
iteration 2300 / 2500: loss 8.999315
iteration 2400 / 2500: loss 8.999174
iteration 0 / 2500: loss 98.405329
iteration 100 / 2500: loss 9.002708
iteration 200 / 2500: loss 8.999678
iteration 300 / 2500: loss 8.999660
iteration 400 / 2500: loss 8.999596
iteration 500 / 2500: loss 8.999596
iteration 600 / 2500: loss 8.999633
iteration 700 / 2500: loss 8.999653
iteration 800 / 2500: loss 8.999607
iteration 900 / 2500: loss 8.999634
iteration 1000 / 2500: loss 8.999638
iteration 1100 / 2500: loss 8.999657
iteration 1200 / 2500: loss 8.999622
iteration 1300 / 2500: loss 8.999648
iteration 1400 / 2500: loss 8.999631
iteration 1500 / 2500: loss 8.999601
iteration 1600 / 2500: loss 8.999691
iteration 1700 / 2500: loss 8.999557
iteration 1800 / 2500: loss 8.999597
iteration 1900 / 2500: loss 8.999677
iteration 2000 / 2500: loss 8.999593
iteration 2100 / 2500: loss 8.999603
iteration 2200 / 2500: loss 8.999695
iteration 2300 / 2500: loss 8.999643
iteration 2400 / 2500: loss 8.999664
iteration 0 / 2500: loss 470.972997
iteration 100 / 2500: loss 8.999947
iteration 200 / 2500: loss 8.999945
iteration 300 / 2500: loss 8.999938
iteration 400 / 2500: loss 8.999926
iteration 500 / 2500: loss 8.999933
iteration 600 / 2500: loss 8.999927
iteration 700 / 2500: loss 8.999913
iteration 800 / 2500: loss 8.999950
iteration 900 / 2500: loss 8.999942
iteration 1000 / 2500: loss 8.999932
iteration 1100 / 2500: loss 8.999934
iteration 1200 / 2500: loss 8.999915
iteration 1300 / 2500: loss 8.999929
iteration 1400 / 2500: loss 8.999909
iteration 1500 / 2500: loss 8.999944
iteration 1600 / 2500: loss 8.999934
iteration 1700 / 2500: loss 8.999927
iteration 1800 / 2500: loss 8.999955
iteration 1900 / 2500: loss 8.999933
iteration 2000 / 2500: loss 8.999932
iteration 2100 / 2500: loss 8.999940
iteration 2200 / 2500: loss 8.999917
iteration 2300 / 2500: loss 8.999930
iteration 2400 / 2500: loss 8.999935
iteration 0 / 2500: loss 938.704063
iteration 100 / 2500: loss 8.999979
iteration 200 / 2500: loss 8.999973
iteration 300 / 2500: loss 8.999969
iteration 400 / 2500: loss 8.999986
iteration 500 / 2500: loss 8.999980
iteration 600 / 2500: loss 8.999978
iteration 700 / 2500: loss 8.999984
iteration 800 / 2500: loss 8.999967
iteration 900 / 2500: loss 8.999969
iteration 1000 / 2500: loss 8.999979
iteration 1100 / 2500: loss 8.999970
iteration 1200 / 2500: loss 8.999972
iteration 1300 / 2500: loss 8.999983
iteration 1400 / 2500: loss 8.999972
iteration 1500 / 2500: loss 8.999972
iteration 1600 / 2500: loss 8.999969
iteration 1700 / 2500: loss 8.999975
iteration 1800 / 2500: loss 8.999979
iteration 1900 / 2500: loss 8.999981
iteration 2000 / 2500: loss 8.999969
iteration 2100 / 2500: loss 8.999974
iteration 2200 / 2500: loss 8.999979
iteration 2300 / 2500: loss 8.999974
iteration 2400 / 2500: loss 8.999980
iteration 0 / 2500: loss 4612.862656
iteration 100 / 2500: loss 760979394468206793333539920186162806784.000000
iteration 200 / 2500: loss 125783799281603413634938717291053266227035436396284189449001381508736352256.000000
iteration 300 / 2500: loss 20791054628714672657015073910654314929536498649819749316061053000385780603662478082523524016448498318276820992.000000
iteration 400 / 2500: loss 3436594816208730107246834456966983807220191740163977539009159203202605303086450187011144797108595406402658760675091957815516375496343375025537024.000000
iteration 500 / 2500: loss 568041599702286676873020191804041323856938567566761724143677774436800500875652323708233857159200019626604472759996672783798125667714465296830867940515794777519102038527956863680512.000000
iteration 600 / 2500: loss 93892727030388066306452681549920880141683320750424324055376657435708418080454620944856131673119356598033877930257967681319525351210343416447033898833266598462222207225876799076923140746285856994965307429328701620224.000000
iteration 700 / 2500: loss 15519715798672825114869675186234372559877226621475863317913470164023284630396081505479459542627833673125417790054634509177941822090974460641003592570743438499848507855732631207238363638597892812822569596214465756824490978165352753672828200370606964736.000000
iteration 800 / 2500: loss 2565284725340023805482916426295661423409573125994375552831189406589224434805287243333765573382220836837690286470564245841974655446264872668080356800160421247917361979371260195504284034249564256905964732302838299843782759524778792277527152380804929455197617716450604393044472044049137664.000000
iteration 900 / 2500: loss inf
iteration 1000 / 2500: loss inf
iteration 1100 / 2500: loss inf
iteration 1200 / 2500: loss inf
iteration 1300 / 2500: loss inf
iteration 1400 / 2500: loss inf
iteration 1500 / 2500: loss inf
iteration 1600 / 2500: loss inf
iteration 1700 / 2500: loss inf
iteration 1800 / 2500: loss nan
iteration 1900 / 2500: loss nan
iteration 2000 / 2500: loss nan
cs231n/classifiers/linear_svm.py:88: RuntimeWarning: invalid value encountered in subtract
  class_scores = class_scores - correct_class_scores + delta
iteration 2100 / 2500: loss nan
iteration 2200 / 2500: loss nan
iteration 2300 / 2500: loss nan
iteration 2400 / 2500: loss nan
iteration 0 / 2500: loss 8795.464802
iteration 100 / 2500: loss 22688860956916448852477204361717347621188242182265465859214351353803612789548858043561551804956126402783862833037968685400064.000000
iteration 200 / 2500: loss 58588308439928320212167358214037252553422027585245119318710241840594591803367151000310928526682795799986139459829497193717581452755917352798383213092318551092833647396716036389661085163269794312934945297006380189395728726067338960638183749976064.000000
iteration 300 / 2500: loss inf
iteration 400 / 2500: loss inf
iteration 500 / 2500: loss inf
iteration 600 / 2500: loss nan
iteration 700 / 2500: loss nan
iteration 800 / 2500: loss nan
iteration 900 / 2500: loss nan
iteration 1000 / 2500: loss nan
iteration 1100 / 2500: loss nan
iteration 1200 / 2500: loss nan
iteration 1300 / 2500: loss nan
iteration 1400 / 2500: loss nan
iteration 1500 / 2500: loss nan
iteration 1600 / 2500: loss nan
iteration 1700 / 2500: loss nan
iteration 1800 / 2500: loss nan
iteration 1900 / 2500: loss nan
iteration 2000 / 2500: loss nan
iteration 2100 / 2500: loss nan
iteration 2200 / 2500: loss nan
iteration 2300 / 2500: loss nan
iteration 2400 / 2500: loss nan
iteration 0 / 2500: loss 43302.281849
iteration 100 / 2500: loss 47716529519223481749743852825825778077218505455368999551546180158405095808997254079898600571424793113958957603315295023954752734102096356662815333988426825844847880899479471081403518760901696229309010904820732830379805356426974110396603165284965723763052264972336497770642624479232.000000
iteration 200 / 2500: loss inf
iteration 300 / 2500: loss nan
iteration 400 / 2500: loss nan
iteration 500 / 2500: loss nan
iteration 600 / 2500: loss nan
iteration 700 / 2500: loss nan
iteration 800 / 2500: loss nan
iteration 900 / 2500: loss nan
iteration 1000 / 2500: loss nan
iteration 1100 / 2500: loss nan
iteration 1200 / 2500: loss nan
iteration 1300 / 2500: loss nan
iteration 1400 / 2500: loss nan
iteration 1500 / 2500: loss nan
iteration 1600 / 2500: loss nan
iteration 1700 / 2500: loss nan
iteration 1800 / 2500: loss nan
iteration 1900 / 2500: loss nan
iteration 2000 / 2500: loss nan
iteration 2100 / 2500: loss nan
iteration 2200 / 2500: loss nan
iteration 2300 / 2500: loss nan
iteration 2400 / 2500: loss nan
iteration 0 / 2500: loss 90593.901491
iteration 100 / 2500: loss inf
iteration 200 / 2500: loss nan
iteration 300 / 2500: loss nan
iteration 400 / 2500: loss nan
iteration 500 / 2500: loss nan
iteration 600 / 2500: loss nan
iteration 700 / 2500: loss nan
iteration 800 / 2500: loss nan
iteration 900 / 2500: loss nan
iteration 1000 / 2500: loss nan
iteration 1100 / 2500: loss nan
iteration 1200 / 2500: loss nan
iteration 1300 / 2500: loss nan
iteration 1400 / 2500: loss nan
iteration 1500 / 2500: loss nan
iteration 1600 / 2500: loss nan
iteration 1700 / 2500: loss nan
iteration 1800 / 2500: loss nan
iteration 1900 / 2500: loss nan
iteration 2000 / 2500: loss nan
iteration 2100 / 2500: loss nan
iteration 2200 / 2500: loss nan
iteration 2300 / 2500: loss nan
iteration 2400 / 2500: loss nan
iteration 0 / 2500: loss 9.890832
iteration 100 / 2500: loss 9.736458
iteration 200 / 2500: loss 9.594256
iteration 300 / 2500: loss 9.471193
iteration 400 / 2500: loss 9.382222
iteration 500 / 2500: loss 9.305617
iteration 600 / 2500: loss 9.232368
iteration 700 / 2500: loss 9.197588
iteration 800 / 2500: loss 9.148704
iteration 900 / 2500: loss 9.120627
iteration 1000 / 2500: loss 9.092389
iteration 1100 / 2500: loss 9.062737
iteration 1200 / 2500: loss 9.042589
iteration 1300 / 2500: loss 9.025905
iteration 1400 / 2500: loss 9.009070
iteration 1500 / 2500: loss 9.007020
iteration 1600 / 2500: loss 8.997540
iteration 1700 / 2500: loss 8.988484
iteration 1800 / 2500: loss 8.980040
iteration 1900 / 2500: loss 8.978982
iteration 2000 / 2500: loss 8.982589
iteration 2100 / 2500: loss 8.976341
iteration 2200 / 2500: loss 8.974794
iteration 2300 / 2500: loss 8.974759
iteration 2400 / 2500: loss 8.969988
iteration 0 / 2500: loss 13.307101
iteration 100 / 2500: loss 10.583576
iteration 200 / 2500: loss 9.574701
iteration 300 / 2500: loss 9.205447
iteration 400 / 2500: loss 9.066683
iteration 500 / 2500: loss 9.021755
iteration 600 / 2500: loss 9.002838
iteration 700 / 2500: loss 8.996102
iteration 800 / 2500: loss 8.993513
iteration 900 / 2500: loss 8.991889
iteration 1000 / 2500: loss 8.994207
iteration 1100 / 2500: loss 8.991652
iteration 1200 / 2500: loss 8.991039
iteration 1300 / 2500: loss 8.993118
iteration 1400 / 2500: loss 8.994005
iteration 1500 / 2500: loss 8.991483
iteration 1600 / 2500: loss 8.993245
iteration 1700 / 2500: loss 8.995095
iteration 1800 / 2500: loss 8.993783
iteration 1900 / 2500: loss 8.992771
iteration 2000 / 2500: loss 8.992078
iteration 2100 / 2500: loss 8.990368
iteration 2200 / 2500: loss 8.991337
iteration 2300 / 2500: loss 8.992916
iteration 2400 / 2500: loss 8.990971
iteration 0 / 2500: loss 17.871972
iteration 100 / 2500: loss 10.179980
iteration 200 / 2500: loss 9.155767
iteration 300 / 2500: loss 9.017919
iteration 400 / 2500: loss 8.998989
iteration 500 / 2500: loss 8.996093
iteration 600 / 2500: loss 8.995711
iteration 700 / 2500: loss 8.995704
iteration 800 / 2500: loss 8.996029
iteration 900 / 2500: loss 8.996115
iteration 1000 / 2500: loss 8.996147
iteration 1100 / 2500: loss 8.996988
iteration 1200 / 2500: loss 8.996484
iteration 1300 / 2500: loss 8.995622
iteration 1400 / 2500: loss 8.996730
iteration 1500 / 2500: loss 8.996140
iteration 1600 / 2500: loss 8.995347
iteration 1700 / 2500: loss 8.995311
iteration 1800 / 2500: loss 8.996118
iteration 1900 / 2500: loss 8.995964
iteration 2000 / 2500: loss 8.995486
iteration 2100 / 2500: loss 8.996929
iteration 2200 / 2500: loss 8.996403
iteration 2300 / 2500: loss 8.995837
iteration 2400 / 2500: loss 8.995813
iteration 0 / 2500: loss 56.922859
iteration 100 / 2500: loss 9.000942
iteration 200 / 2500: loss 8.999330
iteration 300 / 2500: loss 8.999230
iteration 400 / 2500: loss 8.999084
iteration 500 / 2500: loss 8.999160
iteration 600 / 2500: loss 8.999248
iteration 700 / 2500: loss 8.999441
iteration 800 / 2500: loss 8.999046
iteration 900 / 2500: loss 8.999282
iteration 1000 / 2500: loss 8.999008
iteration 1100 / 2500: loss 8.998923
iteration 1200 / 2500: loss 8.999262
iteration 1300 / 2500: loss 8.999187
iteration 1400 / 2500: loss 8.999199
iteration 1500 / 2500: loss 8.999257
iteration 1600 / 2500: loss 8.999263
iteration 1700 / 2500: loss 8.999116
iteration 1800 / 2500: loss 8.999339
iteration 1900 / 2500: loss 8.999415
iteration 2000 / 2500: loss 8.999225
iteration 2100 / 2500: loss 8.999162
iteration 2200 / 2500: loss 8.999158
iteration 2300 / 2500: loss 8.999260
iteration 2400 / 2500: loss 8.999206
iteration 0 / 2500: loss 105.675303
iteration 100 / 2500: loss 8.999621
iteration 200 / 2500: loss 8.999657
iteration 300 / 2500: loss 8.999458
iteration 400 / 2500: loss 8.999712
iteration 500 / 2500: loss 8.999687
iteration 600 / 2500: loss 8.999593
iteration 700 / 2500: loss 8.999630
iteration 800 / 2500: loss 8.999588
iteration 900 / 2500: loss 8.999644
iteration 1000 / 2500: loss 8.999647
iteration 1100 / 2500: loss 8.999700
iteration 1200 / 2500: loss 8.999631
iteration 1300 / 2500: loss 8.999735
iteration 1400 / 2500: loss 8.999589
iteration 1500 / 2500: loss 8.999624
iteration 1600 / 2500: loss 8.999661
iteration 1700 / 2500: loss 8.999636
iteration 1800 / 2500: loss 8.999612
iteration 1900 / 2500: loss 8.999618
iteration 2000 / 2500: loss 8.999502
iteration 2100 / 2500: loss 8.999648
iteration 2200 / 2500: loss 8.999592
iteration 2300 / 2500: loss 8.999628
iteration 2400 / 2500: loss 8.999658
iteration 0 / 2500: loss 446.668162
iteration 100 / 2500: loss 8.999949
iteration 200 / 2500: loss 8.999951
iteration 300 / 2500: loss 8.999934
iteration 400 / 2500: loss 8.999970
iteration 500 / 2500: loss 8.999939
iteration 600 / 2500: loss 8.999942
iteration 700 / 2500: loss 8.999946
iteration 800 / 2500: loss 8.999935
iteration 900 / 2500: loss 8.999947
iteration 1000 / 2500: loss 8.999958
iteration 1100 / 2500: loss 8.999949
iteration 1200 / 2500: loss 8.999940
iteration 1300 / 2500: loss 8.999957
iteration 1400 / 2500: loss 8.999954
iteration 1500 / 2500: loss 8.999945
iteration 1600 / 2500: loss 8.999948
iteration 1700 / 2500: loss 8.999978
iteration 1800 / 2500: loss 8.999937
iteration 1900 / 2500: loss 8.999953
iteration 2000 / 2500: loss 8.999965
iteration 2100 / 2500: loss 8.999943
iteration 2200 / 2500: loss 8.999972
iteration 2300 / 2500: loss 8.999945
iteration 2400 / 2500: loss 8.999962
iteration 0 / 2500: loss 877.922957
iteration 100 / 2500: loss 9.000004
iteration 200 / 2500: loss 8.999999
iteration 300 / 2500: loss 9.000005
iteration 400 / 2500: loss 9.000007
iteration 500 / 2500: loss 9.000012
iteration 600 / 2500: loss 9.000005
iteration 700 / 2500: loss 9.000000
iteration 800 / 2500: loss 8.999993
iteration 900 / 2500: loss 8.999996
iteration 1000 / 2500: loss 8.999994
iteration 1100 / 2500: loss 9.000003
iteration 1200 / 2500: loss 9.000001
iteration 1300 / 2500: loss 8.999998
iteration 1400 / 2500: loss 8.999997
iteration 1500 / 2500: loss 9.000000
iteration 1600 / 2500: loss 9.000003
iteration 1700 / 2500: loss 9.000006
iteration 1800 / 2500: loss 9.000002
iteration 1900 / 2500: loss 9.000009
iteration 2000 / 2500: loss 9.000013
iteration 2100 / 2500: loss 9.000005
iteration 2200 / 2500: loss 9.000009
iteration 2300 / 2500: loss 9.000007
iteration 2400 / 2500: loss 8.999999
iteration 0 / 2500: loss 4497.238843
iteration 100 / 2500: loss 11589736662886497610233339238985700641421166719175998608605126445058781246319076172190328828828132056700935109480473222447104.000000
iteration 200 / 2500: loss 29927596084798033249727296451514151271900139063785037883913139413717608820860099163402603809054933958164145312578625948858281619730391828041536873280836002103147897771520882678874746055364100931470324552982265853540798859067474120493672750383104.000000
iteration 300 / 2500: loss inf
iteration 400 / 2500: loss inf
iteration 500 / 2500: loss inf
iteration 600 / 2500: loss nan
iteration 700 / 2500: loss nan
iteration 800 / 2500: loss nan
iteration 900 / 2500: loss nan
iteration 1000 / 2500: loss nan
iteration 1100 / 2500: loss nan
iteration 1200 / 2500: loss nan
iteration 1300 / 2500: loss nan
iteration 1400 / 2500: loss nan
iteration 1500 / 2500: loss nan
iteration 1600 / 2500: loss nan
iteration 1700 / 2500: loss nan
iteration 1800 / 2500: loss nan
iteration 1900 / 2500: loss nan
iteration 2000 / 2500: loss nan
iteration 2100 / 2500: loss nan
iteration 2200 / 2500: loss nan
iteration 2300 / 2500: loss nan
iteration 2400 / 2500: loss nan
iteration 0 / 2500: loss 8809.336978
iteration 100 / 2500: loss 620870877732346194637298645278485248837856578512986821362356410918395032148159468790348510489890619928126742749163452141051023000821319940426724320014134681699874717016844960687672934343787937792.000000
iteration 200 / 2500: loss inf
iteration 300 / 2500: loss inf
iteration 400 / 2500: loss nan
iteration 500 / 2500: loss nan
iteration 600 / 2500: loss nan
iteration 700 / 2500: loss nan
iteration 800 / 2500: loss nan
iteration 900 / 2500: loss nan
iteration 1000 / 2500: loss nan
iteration 1100 / 2500: loss nan
iteration 1200 / 2500: loss nan
iteration 1300 / 2500: loss nan
iteration 1400 / 2500: loss nan
iteration 1500 / 2500: loss nan
iteration 1600 / 2500: loss nan
iteration 1700 / 2500: loss nan
iteration 1800 / 2500: loss nan
iteration 1900 / 2500: loss nan
iteration 2000 / 2500: loss nan
iteration 2100 / 2500: loss nan
iteration 2200 / 2500: loss nan
iteration 2300 / 2500: loss nan
iteration 2400 / 2500: loss nan
iteration 0 / 2500: loss 45826.184570
iteration 100 / 2500: loss inf
iteration 200 / 2500: loss nan
iteration 300 / 2500: loss nan
iteration 400 / 2500: loss nan
iteration 500 / 2500: loss nan
iteration 600 / 2500: loss nan
iteration 700 / 2500: loss nan
iteration 800 / 2500: loss nan
iteration 900 / 2500: loss nan
iteration 1000 / 2500: loss nan
iteration 1100 / 2500: loss nan
iteration 1200 / 2500: loss nan
iteration 1300 / 2500: loss nan
iteration 1400 / 2500: loss nan
iteration 1500 / 2500: loss nan
iteration 1600 / 2500: loss nan
iteration 1700 / 2500: loss nan
iteration 1800 / 2500: loss nan
iteration 1900 / 2500: loss nan
iteration 2000 / 2500: loss nan
iteration 2100 / 2500: loss nan
iteration 2200 / 2500: loss nan
iteration 2300 / 2500: loss nan
iteration 2400 / 2500: loss nan
iteration 0 / 2500: loss 92251.977611
iteration 100 / 2500: loss inf
iteration 200 / 2500: loss nan
iteration 300 / 2500: loss nan
iteration 400 / 2500: loss nan
iteration 500 / 2500: loss nan
iteration 600 / 2500: loss nan
iteration 700 / 2500: loss nan
iteration 800 / 2500: loss nan
iteration 900 / 2500: loss nan
iteration 1000 / 2500: loss nan
iteration 1100 / 2500: loss nan
iteration 1200 / 2500: loss nan
iteration 1300 / 2500: loss nan
iteration 1400 / 2500: loss nan
iteration 1500 / 2500: loss nan
iteration 1600 / 2500: loss nan
iteration 1700 / 2500: loss nan
iteration 1800 / 2500: loss nan
iteration 1900 / 2500: loss nan
iteration 2000 / 2500: loss nan
iteration 2100 / 2500: loss nan
iteration 2200 / 2500: loss nan
iteration 2300 / 2500: loss nan
iteration 2400 / 2500: loss nan
lr 1.000000e-09 reg 1.000000e+03 train accuracy: 0.118041 val accuracy: 0.124000
lr 1.000000e-09 reg 5.000000e+03 train accuracy: 0.098776 val accuracy: 0.114000
lr 1.000000e-09 reg 1.000000e+04 train accuracy: 0.099878 val accuracy: 0.099000
lr 1.000000e-09 reg 5.000000e+04 train accuracy: 0.106714 val accuracy: 0.110000
lr 1.000000e-09 reg 1.000000e+05 train accuracy: 0.090694 val accuracy: 0.100000
lr 1.000000e-09 reg 5.000000e+05 train accuracy: 0.110449 val accuracy: 0.138000
lr 1.000000e-09 reg 1.000000e+06 train accuracy: 0.080306 val accuracy: 0.082000
lr 1.000000e-09 reg 5.000000e+06 train accuracy: 0.424612 val accuracy: 0.418000
lr 1.000000e-09 reg 1.000000e+07 train accuracy: 0.423469 val accuracy: 0.429000
lr 1.000000e-09 reg 5.000000e+07 train accuracy: 0.421082 val accuracy: 0.416000
lr 1.000000e-09 reg 1.000000e+08 train accuracy: 0.414694 val accuracy: 0.417000
lr 1.000000e-08 reg 1.000000e+03 train accuracy: 0.093102 val accuracy: 0.091000
lr 1.000000e-08 reg 5.000000e+03 train accuracy: 0.107143 val accuracy: 0.123000
lr 1.000000e-08 reg 1.000000e+04 train accuracy: 0.085531 val accuracy: 0.092000
lr 1.000000e-08 reg 5.000000e+04 train accuracy: 0.108429 val accuracy: 0.105000
lr 1.000000e-08 reg 1.000000e+05 train accuracy: 0.123224 val accuracy: 0.136000
lr 1.000000e-08 reg 5.000000e+05 train accuracy: 0.423469 val accuracy: 0.433000
lr 1.000000e-08 reg 1.000000e+06 train accuracy: 0.423612 val accuracy: 0.422000
lr 1.000000e-08 reg 5.000000e+06 train accuracy: 0.424735 val accuracy: 0.425000
lr 1.000000e-08 reg 1.000000e+07 train accuracy: 0.410735 val accuracy: 0.406000
lr 1.000000e-08 reg 5.000000e+07 train accuracy: 0.374286 val accuracy: 0.392000
lr 1.000000e-08 reg 1.000000e+08 train accuracy: 0.327020 val accuracy: 0.338000
lr 1.000000e-07 reg 1.000000e+03 train accuracy: 0.135449 val accuracy: 0.103000
lr 1.000000e-07 reg 5.000000e+03 train accuracy: 0.183122 val accuracy: 0.207000
lr 1.000000e-07 reg 1.000000e+04 train accuracy: 0.214898 val accuracy: 0.208000
lr 1.000000e-07 reg 5.000000e+04 train accuracy: 0.425184 val accuracy: 0.429000
lr 1.000000e-07 reg 1.000000e+05 train accuracy: 0.425204 val accuracy: 0.430000
lr 1.000000e-07 reg 5.000000e+05 train accuracy: 0.420612 val accuracy: 0.429000
lr 1.000000e-07 reg 1.000000e+06 train accuracy: 0.415918 val accuracy: 0.416000
lr 1.000000e-07 reg 5.000000e+06 train accuracy: 0.388184 val accuracy: 0.383000
lr 1.000000e-07 reg 1.000000e+07 train accuracy: 0.330224 val accuracy: 0.359000
lr 1.000000e-07 reg 5.000000e+07 train accuracy: 0.100265 val accuracy: 0.087000
lr 1.000000e-07 reg 1.000000e+08 train accuracy: 0.100265 val accuracy: 0.087000
lr 5.000000e-07 reg 1.000000e+03 train accuracy: 0.316122 val accuracy: 0.317000
lr 5.000000e-07 reg 5.000000e+03 train accuracy: 0.425204 val accuracy: 0.425000
lr 5.000000e-07 reg 1.000000e+04 train accuracy: 0.422755 val accuracy: 0.428000
lr 5.000000e-07 reg 5.000000e+04 train accuracy: 0.424878 val accuracy: 0.422000
lr 5.000000e-07 reg 1.000000e+05 train accuracy: 0.421531 val accuracy: 0.427000
lr 5.000000e-07 reg 5.000000e+05 train accuracy: 0.407633 val accuracy: 0.400000
lr 5.000000e-07 reg 1.000000e+06 train accuracy: 0.374347 val accuracy: 0.362000
lr 5.000000e-07 reg 5.000000e+06 train accuracy: 0.100265 val accuracy: 0.087000
lr 5.000000e-07 reg 1.000000e+07 train accuracy: 0.100265 val accuracy: 0.087000
lr 5.000000e-07 reg 5.000000e+07 train accuracy: 0.100265 val accuracy: 0.087000
lr 5.000000e-07 reg 1.000000e+08 train accuracy: 0.100265 val accuracy: 0.087000
lr 1.000000e-06 reg 1.000000e+03 train accuracy: 0.416265 val accuracy: 0.415000
lr 1.000000e-06 reg 5.000000e+03 train accuracy: 0.423857 val accuracy: 0.428000
lr 1.000000e-06 reg 1.000000e+04 train accuracy: 0.424184 val accuracy: 0.432000
lr 1.000000e-06 reg 5.000000e+04 train accuracy: 0.424735 val accuracy: 0.443000
lr 1.000000e-06 reg 1.000000e+05 train accuracy: 0.419918 val accuracy: 0.413000
lr 1.000000e-06 reg 5.000000e+05 train accuracy: 0.375122 val accuracy: 0.360000
lr 1.000000e-06 reg 1.000000e+06 train accuracy: 0.325224 val accuracy: 0.336000
lr 1.000000e-06 reg 5.000000e+06 train accuracy: 0.100265 val accuracy: 0.087000
lr 1.000000e-06 reg 1.000000e+07 train accuracy: 0.100265 val accuracy: 0.087000
lr 1.000000e-06 reg 5.000000e+07 train accuracy: 0.100265 val accuracy: 0.087000
lr 1.000000e-06 reg 1.000000e+08 train accuracy: 0.100265 val accuracy: 0.087000
best validation accuracy achieved during cross-validation: 0.443000

In [18]:
# Evaluate your trained SVM on the test set
y_test_pred = best_svm.predict(X_test_feats)
test_accuracy = np.mean(y_test == y_test_pred)
print test_accuracy


0.421

In [19]:
# An important way to gain intuition about how an algorithm works is to
# visualize the mistakes that it makes. In this visualization, we show examples
# of images that are misclassified by our current system. The first column
# shows images that our system labeled as "plane" but whose true label is
# something other than "plane".

examples_per_class = 8
classes = ['plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
for cls, cls_name in enumerate(classes):
    idxs = np.where((y_test != cls) & (y_test_pred == cls))[0]
    idxs = np.random.choice(idxs, examples_per_class, replace=False)
    for i, idx in enumerate(idxs):
        plt.subplot(examples_per_class, len(classes), i * len(classes) + cls + 1)
        plt.imshow(X_test[idx].astype('uint8'))
        plt.axis('off')
        if i == 0:
            plt.title(cls_name)
plt.show()


Inline question 1:

Describe the misclassification results that you see. Do they make sense?

Neural Network on image features

Earlier in this assigment we saw that training a two-layer neural network on raw pixels achieved better classification performance than linear classifiers on raw pixels. In this notebook we have seen that linear classifiers on image features outperform linear classifiers on raw pixels.

For completeness, we should also try training a neural network on image features. This approach should outperform all previous approaches: you should easily be able to achieve over 55% classification accuracy on the test set; our best model achieves about 60% classification accuracy.


In [32]:
print X_train_feats.shape


(49000, 170)

In [37]:
from cs231n.classifiers.neural_net import TwoLayerNet

input_dim = X_train_feats.shape[1]
hidden_dim = 500
num_classes = 10

net = TwoLayerNet(input_dim, hidden_dim, num_classes)
best_net = None

################################################################################
# TODO: Train a two-layer neural network on image features. You may want to    #
# cross-validate various parameters as in previous sections. Store your best   #
# model in the best_net variable.                                              #
################################################################################
best_val = -1
for reg in [1e-5,1e-3,1e-2,1e-1]:
    for learning_rate in [5e-2,5e-1,1,2]:
        net = TwoLayerNet(input_dim, hidden_dim, num_classes)
        # Train the network
        stats = net.train(X_train_feats, y_train, X_val_feats, y_val,
            num_iters=2500, batch_size=200,
            learning_rate=learning_rate, learning_rate_decay=0.95,
            reg=reg, verbose=False)
        print "."
        # Predict on the validation set
        val_acc = (net.predict(X_val_feats) == y_val).mean()
        if best_val < val_acc:
            best_val = val_acc
            best_net = net
            print "best till now ",best_val
################################################################################
#                              END OF YOUR CODE                                #
################################################################################


.
best till now  0.418
.
best till now  0.593
.
.
.
.
.
best till now  0.612
.
.
.
.
.
.
.
.
.

In [39]:
# Run your neural net classifier on the test set. You should be able to
# get more than 55% accuracy.

test_acc = (best_net.predict(X_test_feats) == y_test).mean()
print test_acc


0.583

Bonus: Design your own features!

You have seen that simple image features can improve classification performance. So far we have tried HOG and color histograms, but other types of features may be able to achieve even better classification performance.

For bonus points, design and implement a new type of feature and use it for image classification on CIFAR-10. Explain how your feature works and why you expect it to be useful for image classification. Implement it in this notebook, cross-validate any hyperparameters, and compare its performance to the HOG + Color histogram baseline.

Bonus: Do something extra!

Use the material and code we have presented in this assignment to do something interesting. Was there another question we should have asked? Did any cool ideas pop into your head as you were working on the assignment? This is your chance to show off!