input: Write a function to generate a neural network model with TensorFlow and Python for classifying hand-written digits from the MNIST dataset. The function should set up the model architecture, define loss and optimizer, and train the model. It should then evaluate the model's accuracy on the test dataset and print the accuracy. If the function is executed successfully, it should display the optimization status and the accuracy of the model on the test set.
  
  assert mnist_classification() is None
output: 
  def mnist_classification():
      import tensorflow as tf
      from tensorflow.keras import layers, models
      from tensorflow.keras.datasets import mnist
      from tensorflow.keras.utils import to_categorical
  
      (x_train, y_train), (x_test, y_test) = mnist.load_data()
      x_train = x_train.reshape((60000, 28, 28, 1)).astype('float32') / 255
      x_test = x_test.reshape((10000, 28, 28, 1)).astype('float32') / 255
      y_train = to_categorical(y_train)
      y_test = to_categorical(y_test)
  
      model = models.Sequential([
          layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
          layers.MaxPooling2D((2, 2)),
          layers.Conv2D(64, (3, 3), activation='relu'),
          layers.MaxPooling2D((2, 2)),
          layers.Conv2D(64, (3, 3), activation='relu'),
          layers.Flatten(),
          layers.Dense(64, activation='relu'),
          layers.Dense(10, activation='softmax')
      ])
  
      model.compile(optimizer='adam',
                    loss='categorical_crossentropy',
                    metrics=['accuracy'])
  
      model.fit(x_train, y_train, epochs=5, batch_size=64, verbose=1)
  
      test_loss, test_acc = model.evaluate(x_test, y_test, verbose=0)
      print(f'Test accuracy: {test_acc:.4f}')
  