Skip to content

  • 体验新版
    • 正在加载...
  • 登录
  • PaddlePaddle
  • Paddle
  • 合并请求
  • !21165

P
Paddle
  • 项目概览

PaddlePaddle / Paddle
大约 2 年 前同步成功

通知 2325
Star 20933
Fork 5424
  • 代码
    • 文件
    • 提交
    • 分支
    • Tags
    • 贡献者
    • 分支图
    • Diff
  • Issue 1423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
  • Wiki 0
    • Wiki
  • 分析
    • 仓库
    • DevOps
  • 项目成员
  • Pages
P
Paddle
  • 项目概览
    • 项目概览
    • 详情
    • 发布
  • 仓库
    • 仓库
    • 文件
    • 提交
    • 分支
    • 标签
    • 贡献者
    • 分支图
    • 比较
  • Issue 1,423
    • Issue 1,423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
    • 合并请求 543
  • Pages
  • 分析
    • 分析
    • 仓库分析
    • DevOps
  • Wiki 0
    • Wiki
  • 成员
    • 成员
  • 收起侧边栏
  • 动态
  • 分支图
  • 创建新Issue
  • 提交
  • Issue看板

Fix INF bug of softmax_cross_entropy_op !21165

  • Report abuse
!21165 已合并 11月 13, 2019 由 saxon_zh@saxon_zh 创建
#<User:0x00007f7e576a8f10>
  • 概览 7
  • 提交 2
  • 变更 6

Created by: wangxicoding

  1. Fix INF bug in softmax_cross_entropy_op.
  2. Repair softmax test bug.
  3. Add boundary tests to softmax_cross_entropy_op, make sure no INF.

https://github.com/PaddlePaddle/Paddle/blob/fff270eacd83384ad9a62db1af38d7db65dd2cd3/paddle/fluid/operators/softmax_with_cross_entropy_op.cu#L155 计算max_data<-64时会将其强制截断为-64。实测expf(-104.0f)时就会出现数值下溢为0, 假如softmax前面全连接层获得的logits数值都<= (-64-104),就会出现expf数值下溢,进而导致sum(expf(logits - max_data))=0, log(0)出现-inf。 最终 sofmax -= log(0),出现inf,导致后面反向出现inf,最终训练出现nan。

按代码意思其实应该是对(logits - max_data)做clip,避免计算loss时出现log(exp(softmax))出现log(0)的现象。数值稳定版本的softmax_cross_entropy_op见新加注释可以不需要clip。test的softmax函数已按(logits - max_data)做clip进行修改。

指派人
分配到
审核者
Request review from
无
里程碑
无
分配里程碑
工时统计
标识: paddlepaddle/Paddle!21165
Source branch: github/fork/wangxicoding/fix_softmax_cross_entropy_inf
渝ICP备2023009037号

京公网安备11010502055752号

网络110报警服务 Powered by GitLab CE v13.7
开源知识
Git 入门 Pro Git 电子书 在线学 Git
Markdown 基础入门 IT 技术知识开源图谱
帮助
使用手册 反馈建议 博客
《GitCode 隐私声明》 《GitCode 服务条款》 关于GitCode
Powered by GitLab CE v13.7