In [1]:
import numpy as np
import keras
from keras.layers import Conv2D, Flatten, Dense, Dropout, BatchNormalization, MaxPool2D
from keras.utils import to_categorical
from sklearn.model_selection import train_test_split


Using TensorFlow backend.

In [2]:
# cats = np.load('/Users/morizeyao/Documents/Study/4.cat_or_dog/data/cat.npz')
# dogs = np.load('/Users/morizeyao/Documents/Study/4.cat_or_dog/data/dog.npz')

In [3]:
# cats.shape

In [4]:
# cats = cats.reshape(12500, 128, 128, 3)
# dogs = dogs.reshape(12500, 128, 128, 3)
# y = np.vstack([np.ones((12500, 1)), np.zeros((12500, 1))])
# X = np.vstack([cats, dogs])
# np.save('X', X)
# np.save('y', y)

In [5]:
X = np.load('X.npy')
y = np.load('y.npy')

In [6]:
y = to_categorical(y, 2)
Xtrain, Xtest, ytrain, ytest = train_test_split(X, y)

In [7]:
model = keras.models.Sequential()
model.add(Conv2D(64, (4,4), strides=(2,2), input_shape=(128,128,3), padding='valid'))
model.add(keras.layers.advanced_activations.ELU(0.9))
model.add(Dropout(0.2))
model.add(BatchNormalization())
model.add(MaxPool2D(pool_size=(2,2)))

model.add(Conv2D(128, (4,4), strides=(2,2), padding='valid'))
model.add(keras.layers.advanced_activations.ELU(0.9))
model.add(Dropout(0.2))
model.add(BatchNormalization())
model.add(MaxPool2D(pool_size=(2,2)))

model.add(Conv2D(256, (3,3), strides=(2,2), padding='same'))
model.add(keras.layers.advanced_activations.ELU(0.9))
model.add(Dropout(0.2))
model.add(BatchNormalization())
model.add(MaxPool2D(pool_size=(3,3)))

model.add(Flatten())
model.add(Dense(128))
model.add(keras.layers.advanced_activations.ELU(0.9))
model.add(Dense(2, activation='softmax'))

model.summary()
model.compile(loss=keras.losses.binary_crossentropy, optimizer=keras.optimizers.Adam(lr=0.001), metrics=['accuracy'])


_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 63, 63, 64)        3136      
_________________________________________________________________
elu_1 (ELU)                  (None, 63, 63, 64)        0         
_________________________________________________________________
dropout_1 (Dropout)          (None, 63, 63, 64)        0         
_________________________________________________________________
batch_normalization_1 (Batch (None, 63, 63, 64)        256       
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 31, 31, 64)        0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 14, 14, 128)       131200    
_________________________________________________________________
elu_2 (ELU)                  (None, 14, 14, 128)       0         
_________________________________________________________________
dropout_2 (Dropout)          (None, 14, 14, 128)       0         
_________________________________________________________________
batch_normalization_2 (Batch (None, 14, 14, 128)       512       
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 7, 7, 128)         0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 4, 4, 256)         295168    
_________________________________________________________________
elu_3 (ELU)                  (None, 4, 4, 256)         0         
_________________________________________________________________
dropout_3 (Dropout)          (None, 4, 4, 256)         0         
_________________________________________________________________
batch_normalization_3 (Batch (None, 4, 4, 256)         1024      
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 1, 1, 256)         0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 256)               0         
_________________________________________________________________
dense_1 (Dense)              (None, 128)               32896     
_________________________________________________________________
elu_4 (ELU)                  (None, 128)               0         
_________________________________________________________________
dense_2 (Dense)              (None, 2)                 258       
=================================================================
Total params: 464,450
Trainable params: 463,554
Non-trainable params: 896
_________________________________________________________________

In [8]:
model.fit(Xtrain, ytrain, validation_data=(Xtest, ytest))


Train on 18750 samples, validate on 6250 samples
Epoch 1/10
18750/18750 [==============================] - 34s - loss: 0.6521 - acc: 0.6432 - val_loss: 0.8935 - val_acc: 0.5627
Epoch 2/10
 9216/18750 [=============>................] - ETA: 13s - loss: 0.5527 - acc: 0.7180
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-8-87be501447a6> in <module>()
----> 1 model.fit(Xtrain, ytrain, validation_data=(Xtest, ytest))

~/.conda/envs/virenv/lib/python3.6/site-packages/keras/models.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, **kwargs)
    861                               class_weight=class_weight,
    862                               sample_weight=sample_weight,
--> 863                               initial_epoch=initial_epoch)
    864 
    865     def evaluate(self, x, y, batch_size=32, verbose=1,

~/.conda/envs/virenv/lib/python3.6/site-packages/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, **kwargs)
   1428                               val_f=val_f, val_ins=val_ins, shuffle=shuffle,
   1429                               callback_metrics=callback_metrics,
-> 1430                               initial_epoch=initial_epoch)
   1431 
   1432     def evaluate(self, x, y, batch_size=32, verbose=1, sample_weight=None):

~/.conda/envs/virenv/lib/python3.6/site-packages/keras/engine/training.py in _fit_loop(self, f, ins, out_labels, batch_size, epochs, verbose, callbacks, val_f, val_ins, shuffle, callback_metrics, initial_epoch)
   1077                 batch_logs['size'] = len(batch_ids)
   1078                 callbacks.on_batch_begin(batch_index, batch_logs)
-> 1079                 outs = f(ins_batch)
   1080                 if not isinstance(outs, list):
   1081                     outs = [outs]

~/.conda/envs/virenv/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py in __call__(self, inputs)
   2266         updated = session.run(self.outputs + [self.updates_op],
   2267                               feed_dict=feed_dict,
-> 2268                               **self.session_kwargs)
   2269         return updated[:len(self.outputs)]
   2270 

~/.conda/envs/virenv/lib/python3.6/site-packages/tensorflow/python/client/session.py in run(self, fetches, feed_dict, options, run_metadata)
    787     try:
    788       result = self._run(None, fetches, feed_dict, options_ptr,
--> 789                          run_metadata_ptr)
    790       if run_metadata:
    791         proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

~/.conda/envs/virenv/lib/python3.6/site-packages/tensorflow/python/client/session.py in _run(self, handle, fetches, feed_dict, options, run_metadata)
    995     if final_fetches or final_targets:
    996       results = self._do_run(handle, final_targets, final_fetches,
--> 997                              feed_dict_string, options, run_metadata)
    998     else:
    999       results = []

~/.conda/envs/virenv/lib/python3.6/site-packages/tensorflow/python/client/session.py in _do_run(self, handle, target_list, fetch_list, feed_dict, options, run_metadata)
   1130     if handle is None:
   1131       return self._do_call(_run_fn, self._session, feed_dict, fetch_list,
-> 1132                            target_list, options, run_metadata)
   1133     else:
   1134       return self._do_call(_prun_fn, self._session, handle, feed_dict,

~/.conda/envs/virenv/lib/python3.6/site-packages/tensorflow/python/client/session.py in _do_call(self, fn, *args)
   1137   def _do_call(self, fn, *args):
   1138     try:
-> 1139       return fn(*args)
   1140     except errors.OpError as e:
   1141       message = compat.as_text(e.message)

~/.conda/envs/virenv/lib/python3.6/site-packages/tensorflow/python/client/session.py in _run_fn(session, feed_dict, fetch_list, target_list, options, run_metadata)
   1119         return tf_session.TF_Run(session, options,
   1120                                  feed_dict, fetch_list, target_list,
-> 1121                                  status, run_metadata)
   1122 
   1123     def _prun_fn(session, handle, feed_dict, fetch_list):

KeyboardInterrupt: 

In [ ]:
model.evaluate(Xtest, ytest)

In [ ]: