In [12]:
class Create_model(Model):
    def __init__(self, chanDim=-1):
        super(Create_model, self).__init__()
        self.conv1A = Conv2D(16, 3, input_shape = (150, 150, 3))
        self.act1A  = Activation("relu")
        self.pool1A = MaxPooling2D(2)
        self.conv1B = Conv2D(32, 3)
        self.act1B  = Activation("relu")
        self.pool1B = MaxPooling2D(pool_size=(2, 2))
        self.conv1C = Conv2D(64, 3)
        self.act1C  = Activation("relu")
        self.pool1C = MaxPooling2D(2)

        self.flatten = Flatten()
        self.dense2A = Dense(512)
        self.act2A  = Activation("relu")
        self.dropout = Dropout(0.5)
        self.dense2B = Dense(1)
        self.sigmoid  = Activation("sigmoid")
  
    def call(self, inputs):
        x = self.conv1A(inputs)
        x = self.act1A(x)
        x = self.pool1A(x)
        x = self.conv1B(x)
        x = self.act1B(x)
        x = self.pool1B(x)
        x = self.conv1C(x)
        x = self.act1C(x)
        x = self.pool1C(x)

        x = self.flatten(x)
        x = self.dense2A(x)
        x = self.act2A(x)
        x = self.dropout(x)
        x = self.dense2B(x)
        x = self.sigmoid(x)

        return x
In [13]:
model = Create_model()

model.compile(loss='binary_crossentropy',
              optimizer=RMSprop(lr=0.001),
              metrics=['accuracy'])