Python实现的人工神经网络算法示例【基于反向传播算法】

admin4个月前网络知识38

一、人工神经网络算法简介

人工神经网络(Artificial Neural Network,ANN)是一种模拟人脑神经元结构和功能的计算模型,它由大量的神经元(节点)组成,这些神经元之间通过连接权重相互连接,每个神经元接收来自其他神经元的输入信号,对这些信号进行加权求和,然后通过激活函数处理,得到输出信号,神经网络的基本结构包括输入层、隐藏层和输出层。

反向传播算法(Backpropagation Algorithm)是人工神经网络中最常用的一种训练算法,它通过计算网络输出与实际目标之间的误差,然后按照梯度下降法更新连接权重,使网络的输出逐渐接近目标值,反向传播算法的核心思想是:误差从输出层向输入层逐层传递,每一层根据误差调整其连接权重。

Python实现的人工神经网络算法示例【基于反向传播算法】-图1

二、基于反向传播算法的人工神经网络实现

下面以一个简单的三层全连接神经网络为例,介绍如何用Python实现基于反向传播算法的人工神经网络。

1. 导入所需库

import numpy as np

2. 定义激活函数及其导数

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def sigmoid_derivative(x):
    return x * (1 - x)

3. 初始化网络参数

Python实现的人工神经网络算法示例【基于反向传播算法】-图2
input_layer_size = 3
hidden_layer_size = 4
output_layer_size = 2
np.random.seed(0)
W1 = np.random.randn(input_layer_size, hidden_layer_size)
b1 = np.zeros((1, hidden_layer_size))
W2 = np.random.randn(hidden_layer_size, output_layer_size)
b2 = np.zeros((1, output_layer_size))

4. 定义前向传播过程

def forward_propagation(X, W1, b1, W2, b2):
    Z1 = np.dot(X, W1) + b1
    a1 = sigmoid(Z1)
    Z2 = np.dot(a1, W2) + b2
    a2 = sigmoid(Z2)
    return a1, a2

5. 定义反向传播过程

def backward_propagation(X, Y, a1, a2, W1, W2, b1, b2):
    m = X.shape[1]
    dZ2 = a2 - Y
    dW2 = (1 / m) * np.dot(a1.T, dZ2)
    db2 = (1 / m) * np.sum(dZ2, axis=0, keepdims=True)
    dZ1 = np.dot(dZ2, W2.T) * sigmoid_derivative(a1)
    dW1 = (1 / m) * np.dot(X.T, dZ1)
    db1 = (1 / m) * np.sum(dZ1, axis=0, keepdims=True)
    return dW1, dW2, db1, db2

6. 定义训练过程

def train(X, Y, input_layer_size, hidden_layer_size, output_layer_size, learning_rate, num_iterations):
    W1 = np.random.randn(input_layer_size, hidden_layer_size)
    b1 = np.zeros((1, hidden_layer_size))
    W2 = np.random.randn(hidden_layer_size, output_layer_size)
    b2 = np.zeros((1, output_layer_size))
    for i in range(num_iterations):
        a1, a2 = forward_propagation(X, W1, b1, W2, b2)
        dW1, dW2, db1, db2 = backward_propagation(X, Y, a1, a2, W1, W2, b1, b2)
        W1 -= learning_rate * dW1
        b1 -= learning_rate * db1
        W2 -= learning_rate * dW2
        b2 -= learning_rate * db2
        if i % 1000 == 0:
            print("Iteration: " + str(i), "Cost: " + str(np.mean((a2 - Y) ** 2)))
    return W1, b1, W2, b2

7. 测试训练好的网络

```python

X = np.array([0, 0]) # 输入数据,这里仅作示例,实际应用中需要替换为真实数据。

Y = np.array([0]) # 期望输出,这里仅作示例,实际应用中需要替换为真实数据。

input_layer_size = 3 # 输入层神经元数量,这里仅作示例,实际应用中需要替换为真实数据。

hidden_layer_size = 4 # 隐藏层神经元数量,这里仅作示例,实际应用中需要替换为真实数据。

output_layer_size = 2 # 输出层神经元数量,这里仅作示例,实际应用中需要替换为真实数据。

learning_rate = 0.05 # 学习率,可以根据实际情况进行调整,num_iterations = 5000 # 迭代次数,可以根据实际情况进行调整。

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

Python中import机制详解「python的import机制」

Python中import机制详解「python的import机制」

在Python中,import机制是用于导入其他模块或库的机制,通过import语句,我们可以将其他模块中的函数、类和变量引入到当前程序中使用。一、基本语法1. 导入整个模块:import modul...

人工智能编程软件 python

人工智能编程软件 python

在人工智能领域,Python和Java都是非常流行的编程语言,它们各自具有一些优势和特点,适用于不同的应用场景。让我们来了解一下Python,Python是一种高级、解释型、通用的编程语言,它具有简洁...

JavaScript 如何实现菜单栏的切换效果?「js中tab栏切换」

JavaScript 如何实现菜单栏的切换效果?「js中tab栏切换」

在网页设计中,菜单栏的切换效果是一种常见的交互方式,可以提升用户体验,JavaScript 可以通过控制元素的样式和属性来实现菜单栏的切换效果,下面将详细介绍如何使用 JavaScript 实现菜单栏...

报错3

报错3

报错3是指在计算机程序运行过程中出现的错误提示,通常由程序代码中的逻辑错误、语法错误或运行时异常引起,当程序遇到无法处理的情况时,会抛出一个异常并显示相应的错误信息。在计算机编程中,报错3通常是由于以...

如何在 React 中处理表单验证「react提交表单」

如何在 React 中处理表单验证「react提交表单」

在 React 中处理表单验证是一项常见的任务,因为表单验证是确保用户输入正确和有效数据的重要步骤,下面将详细介绍如何在 React 中处理表单验证。1. 使用受控组件:在 React 中,可以使用受...

如何使用Node.js搭建一个简单的博客系统

如何使用Node.js搭建一个简单的博客系统

如何使用Node.js搭建一个简单的博客系统在互联网时代,博客已经成为了个人和组织分享知识和经验的重要平台,而使用Node.js作为后端开发语言,可以快速搭建一个简单但功能完善的博客系统,本文将介绍如...