实现一个识别数字的三层神经网络
时间: 2023-05-19 12:01:09 浏览: 71
好的,这是一个很好的问题。以下是一个实现识别数字的三层神经网络的示例代码:
```python
import numpy as np
# 定义 sigmoid 函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 定义神经网络类
class NeuralNetwork:
def __init__(self, input_nodes, hidden_nodes, output_nodes, learning_rate):
# 初始化权重
self.weights_input_hidden = np.random.normal(0.0, input_nodes**-0.5, (input_nodes, hidden_nodes))
self.weights_hidden_output = np.random.normal(0.0, hidden_nodes**-0.5, (hidden_nodes, output_nodes))
# 初始化学习率
self.learning_rate = learning_rate
def train(self, inputs_list, targets_list):
# 将输入和目标转换为二维数组
inputs = np.array(inputs_list, ndmin=2).T
targets = np.array(targets_list, ndmin=2).T
# 前向传播
hidden_inputs = np.dot(self.weights_input_hidden.T, inputs)
hidden_outputs = sigmoid(hidden_inputs)
final_inputs = np.dot(self.weights_hidden_output.T, hidden_outputs)
final_outputs = sigmoid(final_inputs)
# 计算误差
output_errors = targets - final_outputs
hidden_errors = np.dot(self.weights_hidden_output, output_errors) * hidden_outputs * (1 - hidden_outputs)
# 更新权重
self.weights_hidden_output += self.learning_rate * np.dot(hidden_outputs, output_errors.T)
self.weights_input_hidden += self.learning_rate * np.dot(hidden_errors, inputs.T)
def query(self, inputs_list):
# 将输入转换为二维数组
inputs = np.array(inputs_list, ndmin=2).T
# 前向传播
hidden_inputs = np.dot(self.weights_input_hidden.T, inputs)
hidden_outputs = sigmoid(hidden_inputs)
final_inputs = np.dot(self.weights_hidden_output.T, hidden_outputs)
final_outputs = sigmoid(final_inputs)
return final_outputs
```
这个神经网络有一个输入层、一个隐藏层和一个输出层。输入层有784个节点,对应于28x28像素的图像。隐藏层有100个节点,输出层有10个节点,对应于0到9的数字。学习率为0.1。
你可以使用 MNIST 数据集来训练这个神经网络,该数据集包含了大量手写数字的图像和对应的标签。