| 
          from keras.models import Sequential | 
        
        
           | 
          from keras.layers.core import Flatten, Dense, Dropout | 
        
        
           | 
          from keras.layers.convolutional import Convolution2D, MaxPooling2D, ZeroPadding2D | 
        
        
           | 
          from keras.optimizers import SGD | 
        
        
           | 
          import cv2, numpy as np | 
        
        
           | 
          
 | 
        
        
           | 
          def VGG_16(weights_path=None): | 
        
        
           | 
              model = Sequential() | 
        
        
           | 
              model.add(ZeroPadding2D((1,1),input_shape=(3,224,224))) | 
        
        
           | 
              model.add(Convolution2D(64, 3, 3, activation='relu')) | 
        
        
           | 
              model.add(ZeroPadding2D((1,1))) | 
        
        
           | 
              model.add(Convolution2D(64, 3, 3, activation='relu')) | 
        
        
           | 
              model.add(MaxPooling2D((2,2), stride=(2,2))) | 
        
        
           | 
          
 | 
        
        
           | 
              model.add(ZeroPadding2D((1,1))) | 
        
        
           | 
              model.add(Convolution2D(128, 3, 3, activation='relu')) | 
        
        
           | 
              model.add(ZeroPadding2D((1,1))) | 
        
        
           | 
              model.add(Convolution2D(128, 3, 3, activation='relu')) | 
        
        
           | 
              model.add(MaxPooling2D((2,2), stride=(2,2))) | 
        
        
           | 
          
 | 
        
        
           | 
              model.add(ZeroPadding2D((1,1))) | 
        
        
           | 
              model.add(Convolution2D(256, 3, 3, activation='relu')) | 
        
        
           | 
              model.add(ZeroPadding2D((1,1))) | 
        
        
           | 
              model.add(Convolution2D(256, 3, 3, activation='relu')) | 
        
        
           | 
              model.add(ZeroPadding2D((1,1))) | 
        
        
           | 
              model.add(Convolution2D(256, 3, 3, activation='relu')) | 
        
        
           | 
              model.add(MaxPooling2D((2,2), stride=(2,2))) | 
        
        
           | 
          
 | 
        
        
           | 
              model.add(ZeroPadding2D((1,1))) | 
        
        
           | 
              model.add(Convolution2D(512, 3, 3, activation='relu')) | 
        
        
           | 
              model.add(ZeroPadding2D((1,1))) | 
        
        
           | 
              model.add(Convolution2D(512, 3, 3, activation='relu')) | 
        
        
           | 
              model.add(ZeroPadding2D((1,1))) | 
        
        
           | 
              model.add(Convolution2D(512, 3, 3, activation='relu')) | 
        
        
           | 
              model.add(MaxPooling2D((2,2), stride=(2,2))) | 
        
        
           | 
          
 | 
        
        
           | 
              model.add(ZeroPadding2D((1,1))) | 
        
        
           | 
              model.add(Convolution2D(512, 3, 3, activation='relu')) | 
        
        
           | 
              model.add(ZeroPadding2D((1,1))) | 
        
        
           | 
              model.add(Convolution2D(512, 3, 3, activation='relu')) | 
        
        
           | 
              model.add(ZeroPadding2D((1,1))) | 
        
        
           | 
              model.add(Convolution2D(512, 3, 3, activation='relu')) | 
        
        
           | 
              model.add(MaxPooling2D((2,2), stride=(2,2))) | 
        
        
           | 
          
 | 
        
        
           | 
              model.add(Flatten()) | 
        
        
           | 
              model.add(Dense(4096, activation='relu')) | 
        
        
           | 
              model.add(Dropout(0.5)) | 
        
        
           | 
              model.add(Dense(4096, activation='relu')) | 
        
        
           | 
              model.add(Dropout(0.5)) | 
        
        
           | 
              model.add(Dense(1000, activation='softmax')) | 
        
        
           | 
          
 | 
        
        
           | 
              if weights_path: | 
        
        
           | 
                  model.load_weights(weights_path) | 
        
        
           | 
          
 | 
        
        
           | 
              return model | 
        
        
           | 
               | 
        
        
           | 
          if __name__ == "__main__": | 
        
        
           | 
              im = cv2.resize(cv2.imread('cat.jpg'), (224, 224)) | 
        
        
           | 
              im = im.transpose((2,0,1)) | 
        
        
           | 
              im = np.expand_dims(im, axis=0) | 
        
        
           | 
          
 | 
        
        
           | 
              # Test pretrained model | 
        
        
           | 
              model = VGG_16('vgg16_weights.h5') | 
        
        
           | 
              sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True) | 
        
        
           | 
              model.compile(optimizer=sgd, loss='categorical_crossentropy') | 
        
        
           | 
              out = model.predict(im) |