In [ ]:
import h5py
import numpy as np

np.random.seed(1337)  # for reproducibility

from keras.models import Sequential, Model
from keras.layers import Input, Dense, Dropout, Activation, Flatten, merge
from keras.layers import Convolution2D, MaxPooling2D, BatchNormalization, ZeroPadding2D
from keras.regularizers import l2
from keras.utils import np_utils
from keras.optimizers import SGD, Adam, RMSprop
from keras import backend as K
from keras.engine.topology import Layer
from data_utils import *
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 external modules
# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython
% load_ext autoreload
% autoreload 2

In [3]:
input_size = (3, 32, 32)
nb_classes = 10
# read data
f = h5py.File('cifar10_features.h5', 'r')
X_train_features = f['training_features'][:]
X_validation_features = f['validation_features'][:]
X_test_features = f['testing_features'][:]
f.close()
data = get_CIFAR10_data()
X_train = data['X_train']
y_train = data['y_train']
X_val = data['X_val']
y_val = data['y_val']
X_test = data['X_test']
y_test = data['y_test']
y_train = to_categorical(y_train, nb_classes)
y_val = to_categorical(y_val, nb_classes)

In [8]:
from transfer_learning_keras import classifier

In [40]:
model = classifier(l2_reg=1e-7, keep_prob=0.5)
model.load_weights('transfer_learning_cifar10.h5')
model.compile(loss='categorical_crossentropy', optimizer=RMSprop(lr=1e-2, rho=0.9, epsilon=1e-08, decay=1e-6), 
              metrics=['accuracy'])
model.fit(X_train_features, y_train, batch_size=256, nb_epoch=100, verbose=1,
          validation_data=(X_validation_features, y_val))

score = np.mean((model.predict_classes(X_test_features, verbose=0) == y_test).astype(np.float32))
print 'Test accuracy', score


Train on 49000 samples, validate on 1000 samples
Epoch 1/100
11264/49000 [=====>........................] - ETA: 35s - loss: 2.2685 - acc: 0.6478
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-40-6bf3aab2050d> in <module>()
      4               metrics=['accuracy'])
      5 model.fit(X_train_features, y_train, batch_size=256, nb_epoch=100, verbose=1,
----> 6           validation_data=(X_validation_features, y_val))
      7 
      8 score = np.mean((model.predict_classes(X_test_features, verbose=0) == y_test).astype(np.float32))

/Applications/anaconda/lib/python2.7/site-packages/keras/models.pyc in fit(self, x, y, batch_size, nb_epoch, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, **kwargs)
    670                               class_weight=class_weight,
    671                               sample_weight=sample_weight,
--> 672                               initial_epoch=initial_epoch)
    673 
    674     def evaluate(self, x, y, batch_size=32, verbose=1,

/Applications/anaconda/lib/python2.7/site-packages/keras/engine/training.pyc in fit(self, x, y, batch_size, nb_epoch, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch)
   1194                               val_f=val_f, val_ins=val_ins, shuffle=shuffle,
   1195                               callback_metrics=callback_metrics,
-> 1196                               initial_epoch=initial_epoch)
   1197 
   1198     def evaluate(self, x, y, batch_size=32, verbose=1, sample_weight=None):

/Applications/anaconda/lib/python2.7/site-packages/keras/engine/training.pyc in _fit_loop(self, f, ins, out_labels, batch_size, nb_epoch, verbose, callbacks, val_f, val_ins, shuffle, callback_metrics, initial_epoch)
    889                 batch_logs['size'] = len(batch_ids)
    890                 callbacks.on_batch_begin(batch_index, batch_logs)
--> 891                 outs = f(ins_batch)
    892                 if not isinstance(outs, list):
    893                     outs = [outs]

/Applications/anaconda/lib/python2.7/site-packages/keras/backend/theano_backend.pyc in __call__(self, inputs)
    957     def __call__(self, inputs):
    958         assert isinstance(inputs, (list, tuple))
--> 959         return self.function(*inputs)
    960 
    961 

/Applications/anaconda/lib/python2.7/site-packages/theano/compile/function_module.pyc in __call__(self, *args, **kwargs)
    857         t0_fn = time.time()
    858         try:
--> 859             outputs = self.fn()
    860         except Exception:
    861             if hasattr(self.fn, 'position_of_error'):

/Applications/anaconda/lib/python2.7/site-packages/theano/gof/op.pyc in rval(p, i, o, n)
    910             # default arguments are stored in the closure of `rval`
    911             def rval(p=p, i=node_input_storage, o=node_output_storage, n=node):
--> 912                 r = p(n, [x[0] for x in i], o)
    913                 for o in node.outputs:
    914                     compute_map[o][0] = True

/Applications/anaconda/lib/python2.7/site-packages/theano/tensor/blas.pyc in perform(self, node, inp, out)
   1550         z, = out
   1551         try:
-> 1552             z[0] = numpy.asarray(numpy.dot(x, y))
   1553         except ValueError as e:
   1554             # The error raised by numpy has no shape information, we mean to

KeyboardInterrupt: 

In [39]:
model.save_weights('transfer_learning_cifar10.h5')

In [ ]: