神经网络基础-神经网络补充概念-26-前向和反向传播

这篇具有很好参考价值的文章主要介绍了神经网络基础-神经网络补充概念-26-前向和反向传播。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简单比较

前向传播(Forward Propagation):

前向传播是神经网络中的正向计算过程,用于从输入数据开始,逐层计算每个神经元的输出值,直到得到最终的预测值。在前向传播过程中,我们按以下步骤进行:

输入数据:将输入数据传递给输入层。

加权求和:对每个神经元的输入进行加权求和,即将输入与权重相乘并加上偏差。

激活函数:将加权求和的结果输入激活函数(如Sigmoid、ReLU等),得到神经元的输出。

传递至下一层:将当前层的输出作为下一层的输入,重复步骤 2 和 3,直到达到输出层,得到最终的预测值。

反向传播(Backward Propagation):

反向传播是神经网络中的梯度计算和权重更新过程,用于根据损失函数计算每个参数的梯度,然后根据梯度信息更新网络的权重和偏差。在反向传播过程中,我们按以下步骤进行:

计算损失:使用损失函数计算预测值与真实标签之间的差距。

计算梯度:通过链式法则,从输出层开始,逐层计算每个参数的梯度,传递梯度至前一层。对于每一层,计算权重和偏差的梯度,以及当前层输入的梯度。

参数更新:使用计算得到的梯度信息,根据优化算法(如梯度下降法、Adam等)更新每个参数的值,以减小损失函数。

重复迭代:重复进行前向传播和反向传播,多次迭代,直到损失函数足够小或达到预定的迭代次数。

前向传播和反向传播是神经网络训练的基石,通过不断地在这两个过程中更新参数,神经网络逐渐优化其性能,从而能够更好地进行预测和模式识别任务。文章来源地址https://www.toymoban.com/news/detail-653742.html

代码实现

import numpy as np

# Sigmoid 激活函数及其导数
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

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

# 初始化参数
def initialize_parameters(input_size, hidden_size, output_size):
    parameters = {
        'W1': np.random.randn(hidden_size, input_size),
        'b1': np.zeros((hidden_size, 1)),
        'W2': np.random.randn(output_size, hidden_size),
        'b2': np.zeros((output_size, 1))
    }
    return parameters

# 前向传播
def forward_propagation(X, parameters):
    W1, b1, W2, b2 = parameters['W1'], parameters['b1'], parameters['W2'], parameters['b2']
    Z1 = np.dot(W1, X) + b1
    A1 = sigmoid(Z1)
    Z2 = np.dot(W2, A1) + b2
    A2 = sigmoid(Z2)
    cache = {'Z1': Z1, 'A1': A1, 'Z2': Z2, 'A2': A2}
    return A2, cache

# 计算损失
def compute_loss(A2, Y):
    m = Y.shape[1]
    loss = -np.sum(Y * np.log(A2) + (1 - Y) * np.log(1 - A2)) / m
    return loss

# 反向传播
def backward_propagation(X, Y, cache, parameters):
    m = X.shape[1]
    A1, A2 = cache['A1'], cache['A2']
    W2 = parameters['W2']

    dZ2 = A2 - Y
    dW2 = np.dot(dZ2, A1.T) / m
    db2 = np.sum(dZ2, axis=1, keepdims=True) / m

    dZ1 = np.dot(W2.T, dZ2) * sigmoid_derivative(A1)
    dW1 = np.dot(dZ1, X.T) / m
    db1 = np.sum(dZ1, axis=1, keepdims=True) / m

    grads = {'dW1': dW1, 'db1': db1, 'dW2': dW2, 'db2': db2}
    return grads

# 更新参数
def update_parameters(parameters, grads, learning_rate):
    parameters['W1'] -= learning_rate * grads['dW1']
    parameters['b1'] -= learning_rate * grads['db1']
    parameters['W2'] -= learning_rate * grads['dW2']
    parameters['b2'] -= learning_rate * grads['db2']
    return parameters

# 主函数
def deep_neural_network(X, Y, hidden_size, learning_rate, num_iterations):
    np.random.seed(42)
    input_size = X.shape[0]
    output_size = Y.shape[0]
    parameters = initialize_parameters(input_size, hidden_size, output_size)

    for i in range(num_iterations):
        A2, cache = forward_propagation(X, parameters)
        loss = compute_loss(A2, Y)
        grads = backward_propagation(X, Y, cache, parameters)
        parameters = update_parameters(parameters, grads, learning_rate)

        if i % 100 == 0:
            print(f'Iteration {i}, Loss: {loss:.4f}')

    return parameters

# 示例数据
X = np.array([[0, 0, 1, 1], [0, 1, 0, 1]])
Y = np.array([[0, 1, 1, 0]])

# 定义超参数
hidden_size = 4
learning_rate = 0.1
num_iterations = 10000

# 训练深层神经网络
parameters = deep_neural_network(X, Y, hidden_size, learning_rate, num_iterations)

# 预测
predictions, _ = forward_propagation(X, parameters)
print('Predictions:', predictions)

到了这里,关于神经网络基础-神经网络补充概念-26-前向和反向传播的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 神经网络基础-神经网络补充概念-20-激活函数

    激活函数是神经网络中的一个重要组成部分,它引入了非线性性质,使得神经网络可以学习和表示更复杂的函数关系。激活函数对于将输入信号转换为输出信号起到了关键作用,它在神经元的计算过程中引入了非线性变换。 Sigmoid函数: Sigmoid 函数将输入映射到一个 0 到 1 的

    2024年02月12日
    浏览(30)
  • 神经网络基础-神经网络补充概念-01-二分分类

    二分分类是一种常见的机器学习任务,其目标是将一组数据点分成两个不同的类别。在二分分类中,每个数据点都有一个与之关联的标签,通常是“正类”或“负类”。算法的任务是根据数据点的特征来学习一个模型,以便能够准确地将新的未标记数据点分配到正确的类别中

    2024年02月13日
    浏览(31)
  • 神经网络基础-神经网络补充概念-02-逻辑回归

    逻辑回归是一种用于二分分类问题的统计学习方法,尽管名字中带有\\\"回归\\\"一词,但实际上它用于分类任务。逻辑回归的目标是根据输入特征来预测数据点属于某个类别的概率,然后将概率映射到一个离散的类别标签。 逻辑回归模型的核心思想是将线性回归模型的输出通过一

    2024年02月12日
    浏览(33)
  • 神经网络基础-神经网络补充概念-48-rmsprop

    RMSProp(Root Mean Square Propagation)是一种优化算法,用于在训练神经网络等机器学习模型时自适应地调整学习率,以加速收敛并提高性能。RMSProp可以有效地处理不同特征尺度和梯度变化,对于处理稀疏数据和非平稳目标函数也表现良好。 RMSProp的核心思想是根据参数梯度的历史

    2024年02月12日
    浏览(34)
  • 神经网络基础-神经网络补充概念-59-padding

    在深度学习中,“padding”(填充)通常是指在卷积神经网络(Convolutional Neural Networks,CNNs)等神经网络层中,在输入数据的周围添加额外的元素(通常是零),以调整输入数据的尺寸或形状,从而影响输出的尺寸。 主要目的是为了解决卷积层或池化层等操作对输入尺寸的影

    2024年02月12日
    浏览(34)
  • 神经网络基础-神经网络补充概念-62-池化层

    池化层(Pooling Layer)是深度学习神经网络中常用的一种层级结构,用于减小输入数据的空间尺寸,从而降低模型的计算复杂度,减少过拟合,并且在一定程度上提取输入数据的重要特征。池化层通常紧跟在卷积层之后,用于缩小卷积层输出的尺寸。 常见的池化操作包括最大

    2024年02月12日
    浏览(30)
  • 神经网络基础-神经网络补充概念-56-迁移学习

    迁移学习(Transfer Learning)是一种机器学习技术,旨在将在一个任务上学到的知识或模型迁移到另一个相关任务上,以提高新任务的性能。迁移学习的核心思想是通过利用源领域(source domain)的知识来改善目标领域(target domain)的学习任务。 迁移学习的优势在于可以充分利

    2024年02月12日
    浏览(26)
  • 神经网络基础-神经网络补充概念-42-梯度检验

    梯度检验(Gradient Checking)是一种验证数值计算梯度与解析计算梯度之间是否一致的技术,通常用于确保实现的反向传播算法正确性。在深度学习中,通过梯度检验可以帮助验证你的神经网络模型是否正确地计算了梯度,从而减少可能的错误。 梯度检验的基本思想是使用数值

    2024年02月11日
    浏览(30)
  • 神经网络基础-神经网络补充概念-17-计算神经网络的输出

    计算神经网络的输出通常涉及前向传播(Forward Propagation)的过程,其中输入数据通过网络的层级结构,逐步被传递并变换,最终生成预测结果。下面我将为你展示一个简单的神经网络前向传播的示例。 假设我们有一个具有以下参数的简单神经网络: 输入层:2个神经元 隐藏

    2024年02月12日
    浏览(24)
  • 神经网络基础-神经网络补充概念-54-softmax回归

    Softmax回归(Softmax Regression)是一种用于多分类任务的机器学习算法,特别是在神经网络中常用于输出层来进行分类。它是Logistic回归在多分类问题上的推广。 Softmax回归的主要思想是将原始的线性分数(得分)转化为类别概率分布,使得模型可以对多个类别进行分类。在Soft

    2024年02月12日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包