input: Write a function to generate a Machine Learning model in Python which can recognize handwritten digits from 0 to 9. The function should load the MNIST dataset, define a neural network model with specified layers, preprocess the data, compile the model, and fit the model to the training data. The function should return the trained model.
  
  from tensorflow.keras.datasets import mnist
  from tensorflow.keras.layers import Dense, Input, Dropout
  from tensorflow.keras.models import Model
  from tensorflow.keras.utils import to_categorical
  
  def recognize_handwritten_digits():
      # Loading data
      (X_train, y_train), (X_test, y_test) = mnist.load_data()
  
      # Defining the neural network model
      # Input layer
      inputs = Input(shape=(28, 28,))
  
      # Hidden layer
      h1 = Dense(64, activation='relu')(inputs)
      h2 = Dropout(0.5)(h1)
  
      # Output layer
      outputs = Dense(10, activation='softmax')(h2)
  
      # Compiling the model
      model = Model(inputs=inputs, outputs=outputs)
      model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
  
      # Data pre-processing
      # Reshape inputs from (60000, 28, 28) to (60000, 784)
      X_train = X_train.reshape(60000, 784)
      X_test = X_test.reshape(10000, 784)
  
      # Normalize pixel values
      X_train = X_train.astype('float32')
      X_train /= 255
      X_test = X_test.astype('float32')
      X_test /= 255
  
      # One-hot encode labels
      y_train = to_categorical(y_train, num_classes=10)
      y_test = to_categorical(y_test, num_classes=10)
  
      # Fitting the model
      model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=5, batch_size=128)
  
      return model
  
  assert recognize_handwritten_digits() is not None
output: 
  def recognize_handwritten_digits():
      (X_train, y_train), (X_test, y_test) = mnist.load_data()
      inputs = Input(shape=(28, 28,))
      h1 = Dense(64, activation='relu')(inputs)
      h2 = Dropout(0.5)(h1)
      outputs = Dense(10, activation='softmax')(h2)
      model = Model(inputs=inputs, outputs=outputs)
      model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
      X_train = X_train.reshape(60000, 784)
      X_test = X_test.reshape(10000, 784)
      X_train = X_train.astype('float32')
      X_train /= 255
      X_test = X_test.astype('float32')
      X_test /= 255
      y_train = to_categorical(y_train, num_classes=10)
      y_test = to_categorical(y_test, num_classes=10)
      model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=5, batch_size=128)
      return model
  