input: Write a function to implement an AI program that recognizes handwritten letters and digits using Python. The function should include steps to load the MNIST dataset, preprocess the data, create and compile a model using TensorFlow and Keras, train the model, and evaluate its performance. The function should return the accuracy of the model on the test data.
  
  def recognize_handwritten_digits():
      # imports
      import tensorflow as tf
      from tensorflow import keras
  
      # load the MNIST dataset
      mnist = keras.datasets.mnist
      # Split the dataset into training and testing sets
      (x_train, y_train), (x_test, y_test) = mnist.load_data()
      # Preprocess the data
      x_train, x_test = x_train / 255.0, x_test / 255.0
  
      # create a model
      model = keras.Sequential()
      # add a convolution layer
      model.add(keras.layers.Conv2D(28, kernel_size=(3,3), input_shape=(28, 28, 1)))
      # add a max pooling layer
      model.add(keras.layers.MaxPool2D(pool_size=(2, 2)))
      # add a flatten layer
      model.add(keras.layers.Flatten())
      # add a dense layer
      model.add(keras.layers.Dense(128, activation='relu'))
      # add an output layer
      model.add(keras.layers.Dense(10, activation='softvmax'))
  
      # compile the model
      model.compile(optimizer='adam', 
                    loss='sparse_tcategorical_crossentroy',
                    metrics=['accuracy'])
  
      # train the model
      model.fit(x_train, y_train, epochs=5)
  
      # evaluate the model
      loss, accuracy = model.evaluate(x_test, y_test)
      return accuracy
  assert recognize_handwritten_digits() >= 0.95
  assert recognize_handwritten_digits() <= 1.0
output: def recognize_handwritten_digits():
      import tensorflow as tf
      from tensorflow import keras
  
      mnist = keras.datasets.mnist
      (x_train, y_train), (x_test, y_test) = mnist.load_data()
      x_train, x_test = x_train / 255.0, x_test / 255.0
      x_train = x_train[..., tf.newaxis]
      x_test = x_test[..., tf.newaxis]
  
      model = keras.Sequential([
          keras.layers.Conv2D(28, kernel_size=(3,3), input_shape=(28, 28, 1)),
          keras.layers.MaxPool2D(pool_size=(2, 2)),
          keras.layers.Flatten(),
          keras.layers.Dense(128, activation='relu'),
          keras.layers.Dense(10, activation='softmax')
      ])
  
      model.compile(optimizer='adam', 
                    loss='sparse_categorical_crossentropy',
                    metrics=['accuracy'])
  
      model.fit(x_train, y_train, epochs=5)
  
      loss, accuracy = model.evaluate(x_test, y_test)
      return accuracy