Python实现softmax反向传播的示例代码

Python实现softmax反向传播的示例代码

softmax函数是一种常用的激活函数,它可以将输入转换为概率分布。在神经网络中,softmax函数通常用于多分类问题。本文将提供一个完整的攻略,介绍如何使用Python实现softmax反向传播。我们将提供两个示例,分别是使用softmax反向传播进行多分类和使用softmax反向传播进行图像分类。

softmax反向传播的实现

softmax反向传播是一种常用的技术,它可以用于多分类问题。在softmax反向传播中,我们首先计算softmax函数的输出,然后计算损失函数的梯度。最后,我们使用梯度下降法来更新权重。

以下是一个示例,展示如何使用Python实现softmax反向传播。

import numpy as np

def softmax(x):
    exp_x = np.exp(x)
    return exp_x / np.sum(exp_x, axis=1, keepdims=True)

def cross_entropy_loss(y_pred, y_true):
    m = y_pred.shape[0]
    log_likelihood = -np.log(y_pred[range(m), y_true])
    loss = np.sum(log_likelihood) / m
    return loss

def softmax_backward(y_pred, y_true):
    m = y_pred.shape[0]
    grad = y_pred
    grad[range(m), y_true] -= 1
    grad /= m
    return grad

def train(X, y, learning_rate, epochs):
    n_features = X.shape[1]
    n_classes = len(np.unique(y))
    W = np.random.randn(n_features, n_classes)
    b = np.zeros((1, n_classes))

    for i in range(epochs):
        z = np.dot(X, W) + b
        y_pred = softmax(z)
        loss = cross_entropy_loss(y_pred, y)
        grad = softmax_backward(y_pred, y)
        dW = np.dot(X.T, grad)
        db = np.sum(grad, axis=0, keepdims=True)
        W -= learning_rate * dW
        b -= learning_rate * db

    return W, b

在这个示例中,我们定义了四个函数:softmax函数、交叉熵损失函数、softmax反向传播函数和训练函数。softmax函数用于计算softmax函数的输出,交叉熵损失函数用于计算损失函数的值,softmax反向传播函数用于计算梯度,训练函数用于训练模型。

要使用这个模型,我们需要提供训练数据X和标签y,学习率learning_rate和迭代次数epochs。在训练过程中,我们首先计算z,然后计算softmax函数的输出y_pred。接下来,我们计算损失函数的值和梯度。最后,我们使用梯度下降法来更新权重W和偏置b。

示例1:使用softmax反向传播进行多分类

以下是一个示例,展示如何使用softmax反向传播进行多分类。

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

W, b = train(X_train, y_train, learning_rate=0.1, epochs=1000)

z = np.dot(X_test, W) + b
y_pred = softmax(z)
y_pred_class = np.argmax(y_pred, axis=1)

accuracy = np.mean(y_pred_class == y_test)
print(f'Accuracy: {accuracy}')

在这个示例中,我们使用鸢尾花数据集进行多分类。我们首先加载数据集,然后将数据集分为训练集和测试集。接下来,我们使用训练集训练模型,并使用测试集评估模型的准确性。

示例2:使用softmax反向传播进行图像分类

以下是一个示例,展示如何使用softmax反向传播进行图像分类。

import numpy as np
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical

(X_train, y_train), (X_test, y_test) = mnist.load_data()

X_train = X_train.reshape(-1, 784) / 255.0
X_test = X_test.reshape(-1, 784) / 255.0
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

W, b = train(X_train, y_train, learning_rate=0.1, epochs=100)

z = np.dot(X_test, W) + b
y_pred = softmax(z)
y_pred_class = np.argmax(y_pred, axis=1)

accuracy = np.mean(y_pred_class == np.argmax(y_test, axis=1))
print(f'Accuracy: {accuracy}')

在这个示例中,我们使用MNIST数据集进行图像分类。我们首先加载数据集,然后将数据集分为训练集和测试集。接下来,我们将像素值归一化,并将标签转换为独热编码。最后,我们使用训练集训练模型,并使用测试集评估模型的准确性。

总结

本文提供了一个完整的攻略,介绍了如何使用Python实现softmax反向传播。我们提供了两个示例,分别使用softmax反向传播进行多分类和使用softmax反向传播进行图像分类。在实现过程中,我们使用了numpy和scikit-learn等库,并介绍了一些常用的函数和技术。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现softmax反向传播的示例代码 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • Pytorch 搭建分类回归神经网络并用GPU进行加速的例子

    PyTorch搭建分类回归神经网络并用GPU进行加速的例子 在本文中,我们将介绍如何使用PyTorch搭建分类回归神经网络,并使用GPU进行加速。本文将包含两个示例说明。 示例一:使用PyTorch搭建分类神经网络 我们可以使用PyTorch搭建分类神经网络。示例代码如下: import torch import torch.nn as nn import …

    PyTorch 2023年5月15日
    00
  • pytorch实现fine tuning

    cs231n notespytorch官方实现transfer learningPytorch_fine_tuning_Turtorial cs231n notes transfer learning 特征提取器:将预训练模型当成固定的模型,进行特征提取;然后构造分类器进行分类 微调预训练模型:可以将整个模型都进行参数更新,或者冻结前半部分网络,对后半段网络…

    PyTorch 2023年4月8日
    00
  • pytorch 中的数据类型,tensor的创建

    pytorch中的数据类型     import torch a=torch.randn(2,3) b=a.type() print(b) #检验是否是该数据类型 print(isinstance(a,torch.FloatTensor)) print(isinstance(a,torch.cuda.FloatTensor)) a=a.cuda() prin…

    PyTorch 2023年4月7日
    00
  • PyTorch全连接ReLU网络

    PyTorch全连接ReLU网络 1.PyTorch的核心是两个主要特征: 一个n维张量,类似于numpy,但可以在GPU上运行 搭建和训练神经网络时的自动微分/求导机制 本文将使用全连接的ReLU网络作为运行示例。该网络将有一个单一的隐藏层,并将使用梯度下降训练,通过最小化网络输出和真正结果的欧几里得距离,来拟合随机生成的数据。 2.张量 2.1 热身: …

    PyTorch 2023年4月8日
    00
  • pytorch获取模型某一层参数名及参数值方式

    以下是关于“pytorch获取模型某一层参数名及参数值方式”的完整攻略,其中包含两个示例说明。 示例1:使用state_dict()函数 步骤1:导入必要库 在获取Pytorch模型某一层参数名及参数值之前,我们需要导入一些必要的库,包括torch。 import torch 步骤2:定义模型 在这个示例中,我们使用一个简单的卷积神经网络来演示如何使用sta…

    PyTorch 2023年5月16日
    00
  • pytorch中的pack_padded_sequence和pad_packed_sequence用法

    pack_padded_sequence是将句子按照batch优先的原则记录每个句子的词,变化为不定长tensor,方便计算损失函数。 pad_packed_sequence是将pack_padded_sequence生成的结构转化为原先的结构,定长的tensor。 其中test.txt的内容 As they sat in a nice coffee sho…

    PyTorch 2023年4月7日
    00
  • windows下配置pytorch环境

    借鉴了B站大佬的视频,自己总结安装如下。 首先安装anaconda 按照操作顺序,依次安装,按照我个人习惯,不喜欢讲文件安装在C盘,你们自己决定。 安装完毕之后。 之后打开Anaconda Prompt,如下图: 换源: 输入红线命令到Anaconda Prompt中,不过我建议换清华源,因为用conda安装软件时,比如安装pytroch就会很容易中断,因为…

    2023年4月8日
    00
  • wgan pytorch,pyvision, py-faster-rcnn等的安装使用

    因为最近在读gan的相关工作,wgan的工作不得不赞。于是直接去跑了一下wgan的代码。 原作者的wgan是在lsun上测试的,而且是基于pytorch和pyvision的,于是要装,但是由于我们一直用的是python 2.7,所以无法从WGAN的页面上跳到pytorch的官方页面下载安装,需要安装github上的版本,这个是不需要python3.5的。重新…

    PyTorch 2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部