input: Write a function to generate code for a Machine Learning model in Python which can recognize handwritten digits from 0 to 9. The function should define the neural network model, load the MNIST dataset, preprocess the data, and fit the model using TensorFlow's Keras API. The function should return the trained model.
  
  
  def create_digit_recognition_model():
      # Importing necessary libraries
      import numpy as np
      import pandas as pd
      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
  
      # Loading data
      (X_train, y_train), (X_test, y_test) = mnist.load_data()
  
      # Defining the neural network model
      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'])
  
      # Data pre-processing
      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)
  
      # Fitting the model
      model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=5, batch_size=128)
      return model
  
  
  
  # Testing the function
  assert isinstance(create_digit_recognition_model(), Model) == True
output: def create_digit_recognition_model():
      import numpy as np
      import pandas as pd
      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
  
      (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