NLP(5)-softmax和交叉熵

embedded/2024/9/23 20:14:34/

前言

仅记录学习过程,有问题欢迎讨论

感觉全连接层就像一个中间层转换数据的形态的,或者说预处理数据?

代码

softmax就是把输出的y 归一化,把结果转化为概率值!,在分类问题中很常见。
而交叉熵是一种损失函数,也是在分类问题中使用,通常搭配着softmax使用;可以计算分布概率之间的差异;期望是两个概率分布的更相似。

# softMAX --概率归一化
# 主要把输出的y 的可能性 sum = 1
# 比如 判断是否为 猫狗 y = 【猫,狗,都不是】# 【123====[ e^1/(e^1+e^2+e^3) ,e^2/(e^1+e^2+e^3) ,e^3/(e^1+e^2+e^3) ]# 损失函数:
# 均方差 (y-y_pre)**2/n
# 交叉熵:y_true=[1,0,0] y_pred=[0.5,0.4,0.1] =loss==>| 1*log0.5+0*log0.4+0 | = 0.3import torch
import torch.nn as nn
import numpy as np##使用torch计算交叉熵
ce_loss = nn.CrossEntropyLoss()
# 假设有3个样本,每个都在做3分类
pred = torch.FloatTensor([[0.3, 0.1, 0.3],[0.9, 0.2, 0.9],[0.5, 0.4, 0.2]])  # n*class_num
# 正确的类别 == [0,1,0][0,0,1][1,0,0]
target = torch.LongTensor([1, 2, 0])
print(target)
loss = ce_loss(pred, target)
print(loss, "torch输出交叉熵")# 实现softMax函数 x为矩阵格式!!
def softmax(x):return np.exp(x) / np.sum(np.exp(x), axis=1, keepdims=True)# 验证softmax函数
# print(torch.softmax(pred, dim=1))
# print(softmax(pred.numpy()))# 将输入转化为onehot矩阵 == [0,1,0][0,0,1][1,0,0]
def to_one_hot(target, shape):one_hot_target = np.zeros(shape)# enumerate 也是一种循环 格式为【index,value】for i, t in enumerate(target):one_hot_target[i][t] = 1return one_hot_target# target_matrix =  to_one_hot(target,pred.shape)
# print(target_matrix)# 实现交叉熵
def cross_entropy(pred, target):batch_size, class_num = pred.shape# 先归一化pred = softmax(pred)# 变为矩阵格式target = to_one_hot(target,pred.shape)# 每一列求entropy = -np.sum(target * np.log(pred), axis=1)return sum(entropy) / batch_sizeprint(cross_entropy(pred.numpy(), target.numpy()), "手动实现交叉熵")

http://www.ppmy.cn/embedded/12893.html

相关文章

公链系统开发全指南: 从规划到实施

在区块链技术的迅速发展和应用推广下,公链系统的开发成为了当前数字资产领域的热门话题。从规划到实施,公链系统的开发过程需要经历多个步骤,下文将详细介绍每个步骤。 第一步: 规划和设计 市场调研: 分析市场需求和竞争情况,确定…

go语言并发实战——日志收集系统(四) 利用tail包实现对日志文件的实时监控

Linux中的tail命令 tail 命令是一个在 Unix/Linux 操作系统上用来显示文件末尾内容的命令。它可以显示文件的最后几行内容,默认情况下显示文件的最后 10 行。tail 命令 非常有用,特别是在我们查看日志文件或者监视文件变化时。 基本用法如下&#xff1a…

如何操作HTTP返回头-ApiHug小技巧-002

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace &…

vue项目中定位组件来源的查找思路

vue项目中定位组件来源的查找思路 先去【package.json】里面看看有没有看【a】开头或者【a-】开头的插件名 例如:如果我不知道【el-tree】,先去【package.json】里面找【el】或者【el-】开头的插件名,结果知道了【element-ui】这样就可以直接…

PHP中的错误处理机制是怎样的?

HP中的错误处理机制是一个关键组件,它帮助开发者识别、记录和处理在代码执行过程中出现的各种问题。这种机制确保了程序的稳定性和可维护性,使开发者能够迅速定位并修复错误。 PHP中的错误处理主要包括以下几个方面: 错误级别: P…

作为前端工程师如何SEO优化

什么是SEO? SEO,全称Search Engine Optimization,即搜索引擎优化。它是一种利用搜索引擎的规则来提高网站在搜索引擎内自然排名的方式,从而吸引更多的用户访问网站,提高网站的访问量,进而提升网站的销售能…

Golang | Leetcode Golang题解之第37题解数独

题目: 题解: func solveSudoku(board [][]byte) {var line, column [9][9]boolvar block [3][3][9]boolvar spaces [][2]intfor i, row : range board {for j, b : range row {if b . {spaces append(spaces, [2]int{i, j})} else {digit : b - 1line…

YOLOv5检测框crop、MobileNetv3分类网络

在实际深度学习项目中,目标检测算法检测出的目标也会作为分类网络的输入数据,利用目标检测算法的对被检测图像进行抠图,以抠出来的图来扩充分类网络的数据。本文主要讲解yolov5和mobilenetv3结合使用扩展数据样本。 目录 1、yolov5检测框cro…