从零开始:用Python手写神经网络

在当今的人工智能领域,神经网络已经成为解决复杂问题的核心技术之一。从图像识别到自然语言处理,再到强化学习,神经网络的身影无处不在。然而,对于许多初学者来说,神经网络似乎是一个神秘而复杂的黑盒子。本文将带你用基础的 Python 代码构建一个简单的神经网络,揭开它的神秘面纱,让你真正理解神经网络的工作原理。

一、神经网络的基本原理

在深入了解代码之前,我们需要先回顾一下神经网络的基本原理。神经网络是由大量的神经元(或节点)组成的,这些神经元按照一定的层次结构连接在一起。每一层的神经元接收来自前一层神经元的输入,并通过一个激活函数生成输出,传递给下一层。

一个典型的神经网络包括:

  • 输入层:接收外部数据。

  • 隐藏层:对输入数据进行处理和变换。

  • 输出层:生成最终的预测结果。

神经网络的学习过程主要通过调整神经元之间的连接权重来实现。通过反向传播算法(Backpropagation),网络可以根据预测结果与真实值之间的误差,逐步调整权重,使误差最小化。

二、构建神经网络的 Python 环境

在开始编写代码之前,我们需要准备好 Python 环境。本文使用的工具是 Python 3.8 及以上版本,并且需要安装以下库:

  • NumPy:用于高效的数值计算。

  • Matplotlib:用于可视化数据和训练过程。

你可以通过以下命令安装这些库:

pip install numpy matplotlib

三、用基础 Python 代码构建神经网络

1. 数据准备

为了方便理解,我们先构建一个简单的数据集,用于训练神经网络。假设我们有一个二分类问题,数据集由二维特征和对应的标签组成。

import numpy as np

# 构造简单的二分类数据集
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])  # 输入数据
y = np.array([0, 1, 1, 0])  # 对应的标签 (异或问题)

2. 初始化神经网络结构

我们定义一个简单的神经网络,包含一个输入层、一个隐藏层和一个输出层。隐藏层的神经元数量可以自行设置,这里我们选择 4 个神经元。

# 神经网络参数
input_size = 2  # 输入层神经元数量
hidden_size = 4  # 隐藏层神经元数量
output_size = 1  # 输出层神经元数量

# 初始化权重和偏置
np.random.seed(42)  # 设置随机种子,保证结果可复现
weights_input_hidden = np.random.randn(input_size, hidden_size)  # 输入层到隐藏层的权重
bias_hidden = np.zeros((1, hidden_size))  # 隐藏层偏置

weights_hidden_output = np.random.randn(hidden_size, output_size)  # 隐藏层到输出层的权重
bias_output = np.zeros((1, output_size))  # 输出层偏置

3. 激活函数及其导数

激活函数是神经网络中的关键组件,它为网络引入了非线性特性。这里我们使用 Sigmoid 激活函数及其导数。

def sigmoid(x):
    """Sigmoid 激活函数"""
    return 1 / (1 + np.exp(-x))

def sigmoid_derivative(x):
    """Sigmoid 激活函数的导数"""
    retu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值