技术文摘
Python 简单神经网络创建教程(含代码)
2024-12-31 12:54:39 小编
Python 简单神经网络创建教程(含代码)
在当今的人工智能和机器学习领域,神经网络扮演着至关重要的角色。Python 作为一种强大而灵活的编程语言,为创建神经网络提供了丰富的库和工具。在本文中,我们将一起探索如何使用 Python 创建一个简单的神经网络。
我们需要导入所需的库。numpy 库用于数值计算,matplotlib 库用于数据可视化。
import numpy as np
import matplotlib.pyplot as plt
接下来,定义神经网络的类。这个类包含了初始化函数、前向传播函数和反向传播函数。
class NeuralNetwork:
def __init__(self, input_size, hidden_size, output_size):
self.input_size = input_size
self.hidden_size = hidden_size
self.output_size = output_size
# 随机初始化权重
self.W1 = np.random.randn(self.input_size, self.hidden_size)
self.b1 = np.zeros((1, self.hidden_size))
self.W2 = np.random.randn(self.hidden_size, self.output_size)
self.b2 = np.zeros((1, self.output_size))
def forward(self, X):
self.z1 = np.dot(X, self.W1) + self.b1
self.a1 = np.tanh(self.z1)
self.z2 = np.dot(self.a1, self.W2) + self.b2
self.a2 = np.exp(self.z2) / np.sum(np.exp(self.z2), axis=1, keepdims=True)
return self.a2
def backward(self, X, y, learning_rate):
# 反向传播的计算
m = X.shape[0]
dZ2 = self.a2 - y
dW2 = np.dot(self.a1.T, dZ2) / m
db2 = np.sum(dZ2, axis=0, keepdims=True) / m
dZ1 = np.dot(dZ2, self.W2.T) * (1 - np.power(self.a1, 2))
dW1 = np.dot(X.T, dZ1) / m
db1 = np.sum(dZ1, axis=0, keepdims=True) / m
# 更新权重
self.W1 -= learning_rate * dW1
self.b1 -= learning_rate * db1
self.W2 -= learning_rate * dW2
self.b2 -= learning_rate * db2
然后,准备数据并进行训练。
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([[0, 1], [1, 0], [1, 0], [0, 1]])
nn = NeuralNetwork(2, 4, 2)
epochs = 1000
learning_rate = 0.1
for epoch in range(epochs):
nn.forward(X)
nn.backward(X, y, learning_rate)
最后,我们可以对新的数据进行预测。
通过以上步骤,我们成功创建了一个简单的神经网络,并能够对数据进行训练和预测。希望这个教程能帮助您初步理解和掌握 Python 中神经网络的创建过程。随着深入学习,您可以进一步优化网络结构、调整超参数以获得更好的性能。
TAGS: Python 神经网络代码 简单神经网络
- Zabbix 监控 Oracle 表数据的运用方法
- MySQL8.0 用户角色管理与授权的达成
- SQL Server 表中数据的三种插入方式
- MySQL8.0 中修改 Root 密码的步骤方法
- SQL 中 NVL()函数的运用
- 详解 MySQL 中的 int 类型与 Java 中的 Long 类型的对应关系
- Zabbix 监控 Oracle 表空间的操作之道
- SQL 窗口函数中 partition by 的运用
- SQLServer 数据库服务器读写性能中阵列 RAID 对比概述
- Zabbix 对 Oracle 归档日志空间的监控全程
- Mysql 中多条数据存在时怎样按时间获取最新一组数据(思路详析)
- MySQL 5.5、5.6、5.7 与 8.0 特性比较
- SQL Server 数据库路径能否自行定制及存储位置设定
- MySQL 实现获取二维数组字符串的最后一个值的代码
- SQL Server 连接时的网络及实例相关错误