手把手教你用Python创建简单的神经网络(附代码)("Python入门教程:手把手带你构建简易神经网络(附完整代码)")
原创
一、引言
神经网络是一种模拟人脑神经元结构的计算模型,广泛应用于机器学习和人工智能领域。Python作为一种易于学习且功能强劲的编程语言,为构建神经网络提供了充裕的库和工具。本文将手把手教你使用Python创建一个单纯的神经网络,并附上完整的代码。
二、准备工作
在起始构建神经网络之前,我们需要安装以下Python库:
- numpy:用于数值计算
- matplotlib:用于绘制图表
可以使用以下命令安装这些库:
pip install numpy matplotlib
三、构建神经网络的基本结构
神经网络由输入层、隐藏层和输出层组成。每个神经元与相邻的神经元通过权重连接。下面我们将构建一个单纯的神经网络,包括一个输入层、一个隐藏层和一个输出层。
四、代码实现
下面是构建简易神经网络的完整代码:
import numpy as np
import matplotlib.pyplot as plt
# 设置随机种子
np.random.seed(0)
# 定义激活函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 定义Sigmoid函数的导数
def sigmoid_derivative(x):
return x * (1 - x)
# 定义神经网络类
class NeuralNetwork:
def __init__(self, input_size, hidden_size, output_size):
# 初始化权重
self.weights_input_to_hidden = np.random.rand(input_size, hidden_size)
self.weights_hidden_to_output = np.random.rand(hidden_size, output_size)
def forward(self, inputs):
# 输入层到隐藏层的线性变换
hidden_layer_activation = np.dot(inputs, self.weights_input_to_hidden)
# 应用激活函数
hidden_layer_output = sigmoid(hidden_layer_activation)
# 隐藏层到输出层的线性变换
final_output = np.dot(hidden_layer_output, self.weights_hidden_to_output)
# 应用激活函数
output = sigmoid(final_output)
return output
def backward(self, output, y_true):
# 计算输出误差
output_error = y_true - output
# 计算输出误差的梯度
output_delta = output_error * sigmoid_derivative(output)
# 计算隐藏层误差
hidden_error = output_delta.dot(self.weights_hidden_to_output.T)
# 计算隐藏层误差的梯度
hidden_delta = hidden_error * sigmoid_derivative(hidden_layer_output)
# 更新权重
self.weights_hidden_to_output += hidden_layer_output.T.dot(output_delta)
self.weights_input_to_hidden += inputs.T.dot(hidden_delta)
def train(self, training_inputs, training_outputs, epochs):
for epoch in range(epochs):
for inputs, output in zip(training_inputs, training_outputs):
self.forward(inputs)
self.backward(self.forward(inputs), output)
# 创建神经网络实例
nn = NeuralNetwork(2, 3, 1)
# 训练数据
training_inputs = np.array([[0, 0],
[0, 1],
[1, 0],
[1, 1]])
training_outputs = np.array([[0],
[1],
[1],
[0]])
# 训练神经网络
nn.train(training_inputs, training_outputs, 10000)
# 测试神经网络
print("预测因此:")
print(nn.forward(training_inputs))
五、代码解析
1. 首先,我们导入了numpy和matplotlib库,并设置了随机种子,以保证每次运行因此一致。
2. 我们定义了Sigmoid激活函数及其导数,Sigmoid函数用于将神经元的输出压缩到0和1之间。
3. 接下来,我们定义了一个名为NeuralNetwork的类,它包含神经网络的权重和前向传播、反向传播方法。
4. 在NeuralNetwork类的构造函数中,我们初始化了输入层到隐藏层和隐藏层到输出层的权重。
5. forward方法实现了输入层到隐藏层和隐藏层到输出层的前向传播。
6. backward方法实现了反向传播,通过输出误差更新权重。
7. train方法用于训练神经网络,它接收训练数据、训练输出和迭代次数作为参数。
8. 最后,我们创建了一个NeuralNetwork实例,使用AND门函数作为训练数据,训练了10000次。
六、总结
本文详细介绍了怎样使用Python创建一个单纯的神经网络。通过明白神经网络的原理和代码实现,我们可以更好地明白神经网络的工作机制。当然,这只是一个非常基础的神经网络示例,实际应用中的神经网络会更加纷乱和强劲。期待本文能帮助您入门神经网络编程。