技术文摘
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 神经网络代码 简单神经网络
- PHP 中 Caddy2 协同服务的使用方法
- Go 中接口的运用:平衡实用性与脆弱性
- 深入探究 Java 8 新特性:日期时间 API 中的 LocalDateTime 类
- 线程池使用不当的五大陷阱
- 未研究 SynchronousQueue 源码,勿言精通线程池
- RocketMQ 对多事务消息的完美支持方案
- Redis 中分布式锁实现可重入性及防止死锁的机制探讨
- React Native 进军混合现实,我们一同探讨
- .NET 中 Autofac 依赖注入框架一篇读懂
- Python 开发者必知的内存管理及垃圾回收知识
- VR 于工作场所的未来走向
- 面试官:线程通讯的方法及其众多的原因
- 彻底搞懂设计模式之单例模式
- 七个 Vue.js 实用插件分享,助力提升开发效率
- 深入剖析 C++中的纯虚函数:其重要性何在?