[{'role': 'system', 'content': "You are an expert in machine learning and your task is to classify code snippets into one of the following categories: ['helper_functions', 'load_data', 'data_exploration', 'data_preprocessing', 'evaluation', 'modelling', 'prediction', 'result_visualization', 'save_results', 'comment_only']."}, {'role': 'user', 'content': 'Identify the single most appropriate category to which the provided code belongs. Provide your response as a single category label without any additional information, commentary, or personal opinions.\\nPython Code:import numpy as np\nfrom pdb import set_trace\nclass NeuralNetwork(object):\ndef __init__(self, input_nodes, hidden_nodes, output_nodes, learning_rate):\nself.input_nodes = input_nodes\nself.hidden_nodes = hidden_nodes\nself.output_nodes = output_nodes\nself.weights_input_to_hidden = np.random.normal(0.0, self.hidden_nodes**-0.5,\n(self.hidden_nodes, self.input_nodes))\nself.weights_hidden_to_output = np.random.normal(0.0, self.output_nodes**-0.5,\n(self.output_nodes, self.hidden_nodes))\nself.lr = learning_rate\nself.activation_function = self.sigmoid\ndef sigmoid(self, x):\nreturn 1 / (1 + np.exp(-x))\ndef train(self, inputs_list, targets_list):\ninputs = np.array(inputs_list, ndmin=2).T\ntargets = np.array(targets_list, ndmin=2).T\nhidden_inputs = np.dot(self.weights_input_to_hidden, inputs)\nhidden_outputs = self.activation_function(hidden_inputs)\nfinal_inputs = np.dot(self.weights_hidden_to_output, hidden_outputs)  # signals into final output layer\nfinal_outputs = final_inputs  # signals from final output layer\noutput_errors = (targets - final_outputs)  # Output layer error is the difference between desired target and actual output.\nhidden_errors = self.weights_hidden_to_output.T.dot(output_errors) * hidden_outputs * (1 - hidden_outputs)  # errors propagated to the hidden layer\noutput_grad = self.lr * output_errors.dot(hidden_outputs.T)\nhidden_grad = self.lr * hidden_errors.dot(inputs.T)\nself.weights_hidden_to_output += output_grad  # update hidden-to-output weights with gradient descent step\nself.weights_input_to_hidden += hidden_grad   # update input-to-hidden weights with gradient descent step\ndef run(self, inputs_list):\ninputs = np.array(inputs_list, ndmin=2).T\nhidden_inputs = np.dot(self.weights_input_to_hidden, inputs)  # signals into hidden layer\nhidden_outputs = self.activation_function(hidden_inputs)  # signals from hidden layer\nfinal_inputs = np.dot(self.weights_hidden_to_output, hidden_outputs)   # signals into final output layer\nfinal_outputs = final_inputs  # signals from final output layer\nreturn final_outputs'}, {'role': 'assistant', 'content': 'modelling'}]