input: Write a function to create a machine learning model in Python that distinguishes between cats and dogs using a dataset of 800 images. The function should return the compiled model.
  
  
  import numpy as np
  import keras
  from keras.layers import Dense, Conv2D, MaxPooling2D, Dropout, Flatten
  from keras.models import Sequential
  from keras.preprocessing.image import ImageDataGenerator
  
  def create_cat_dog_model():
      # Create the neural network model
      model = Sequential()
  
      # Input layer
      model.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
  
      # Hidden layers
      model.add(MaxPooling2D(pool_size = (2, 2)))
      model.add(Dropout(0.3))
      model.add(Conv2D(64, (3, 3), activation = 'relu'))
      model.add(MaxPooling2D(pool_size = (2, 2)))
      model.add(Dropout(0.3))
      model.add(Conv2D(64, (3, 3), activation = 'relu'))
      model.add(MaxPooling2D(pool_size = (2, 2)))
      model.add(Dropout(0.3))
  
      # Output layer
      model.add(Flatten())
      model.add(Dense(units = 128, activation = 'relu'))
      model.add(Dense(units = 1, activation = 'sigmoid'))
  
      # Compile the model
      model.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics = ['accuracy'])
  
      return model
  
  # Test the function
  model = create_cat_dog_model()
  assert isinstance(model, keras.models.Sequential)
  assert model.layers[0].input_shape == (None, 64, 64, 3)
  assert model.layers[-1].output_shape == (None, 1)
  
output: def create_cat_dog_model():
      model = Sequential()
      model.add(Conv2D(32, (3, 3), input_shape=(64, 64, 3), activation='relu'))
      model.add(MaxPooling2D(pool_size=(2, 2)))
      model.add(Dropout(0.3))
      model.add(Conv2D(64, (3, 3), activation='relu'))
      model.add(MaxPooling2D(pool_size=(2, 2)))
      model.add(Dropout(0.3))
      model.add(Conv2D(64, (3, 3), activation='relu'))
      model.add(MaxPooling2D(pool_size=(2, 2)))
      model.add(Dropout(0.3))
      model.add(Flatten())
      model.add(Dense(units=128, activation='relu'))
      model.add(Dense(units=1, activation='sigmoid'))
      model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
      return model