网站后台是怎样制作导航网站怎么做

张小明 2026/1/13 10:00:26
网站后台是怎样制作,导航网站怎么做,临沂 企业网站建设,用dw做网站维护教程TensorFlow中tf.nn.softmax与log_softmax精度差异 在构建深度学习模型时#xff0c;分类任务几乎无处不在#xff1a;从识别一张图片中的猫狗#xff0c;到判断一段文本的情感倾向#xff0c;最终都离不开将神经网络输出的原始得分#xff08;logits#xff09;转化为可解…TensorFlow中tf.nn.softmax与log_softmax精度差异在构建深度学习模型时分类任务几乎无处不在从识别一张图片中的猫狗到判断一段文本的情感倾向最终都离不开将神经网络输出的原始得分logits转化为可解释的概率。这一过程看似简单实则暗藏玄机——尤其是在数值计算层面一个微小的选择偏差可能直接影响模型训练的稳定性与收敛速度。TensorFlow 提供了tf.nn.softmax和tf.nn.log_softmax两个核心函数来完成这项工作。表面上看它们只是“概率”和“对数概率”的区别但深入底层就会发现这种差异远不止数学形式那么简单。特别是在处理极端值、进行梯度反向传播或运行在半精度FP16环境下时二者的表现可谓天壤之别。我们不妨先从一个问题切入为什么现代深度学习框架在实现交叉熵损失时普遍推荐设置from_logitsTrue答案的关键就藏在log_softmax的设计哲学之中。以三分类任务为例假设某样本的 logits 输出为[2.0, 1.0, 0.1]。使用tf.nn.softmax可得import tensorflow as tf logits tf.constant([[2.0, 1.0, 0.1]]) probs tf.nn.softmax(logits, axis-1) print(probs.numpy()) # [[0.6590 0.2424 0.0986]]这是一组标准的概率分布语义清晰便于调试。但如果我们将输入改为[1000.0, 999.0, 998.0]会发生什么logits_large tf.constant([[1000.0, 999.0, 998.0]]) probs_large tf.nn.softmax(logits_large, axis-1) print(probs_large.numpy()) # [[nan nan nan]] 或 [[inf inf inf]]问题来了exp(1000)已经远远超出 float32 的表示范围约 $3.4 \times 10^{38}$导致上溢整个计算崩溃。即使所有值都很小比如[-1000, -1001, -1002]也会因下溢而全部趋近于零归一化失败。这就是softmax的致命弱点——它直接对原始 logits 做指数运算没有任何保护机制。相比之下tf.nn.log_softmax采用了一种更聪明的做法。其数学定义如下$$\text{log_softmax}(x_i) x_i - \log\left(\sum_j e^{x_j}\right)$$关键在于这个操作内部会自动执行最大值平移max shifting找出当前维度上的最大值 $ x_{\max} $将所有元素减去该值$ x’i x_i - x{\max} $此时 $ x’_i \leq 0 $故 $ e^{x’_i} \leq 1 $避免了上溢再计算 $\log\left(\sum e^{x’_i}\right)$即稳定的 LogSumExp 操作最终结果为$ x_i - x_{\max} - \log\left(\sum e^{x’_i}\right) $用同样的大数值测试logits_large tf.constant([[1000.0, 999.0, 998.0]]) log_probs tf.nn.log_softmax(logits_large, axis-1) print(log_probs.numpy()) # [[ 0. -1. -2. ]]结果完全正常因为实际上计算的是$$[1000-1000, 999-1000, 998-1000] - \log(e^0 e^{-1} e^{-2}) \approx [0, -1, -2] - \text{const}$$常数项被统一减去相对关系保持不变。这也解释了为何log_softmax输出多为负数——毕竟真实概率小于1其对数自然为负。# 验证是否可还原 probs_recovered tf.exp(log_probs) print(probs_recovered.numpy()) # [[0.665 0.244 0.090]]还原后的概率与理论值高度一致且全程未发生任何溢出。那么在实际工程中我们应该如何选择来看一个典型的图像分类流程model tf.keras.Sequential([ tf.keras.layers.Dense(64, activationrelu), tf.keras.layers.Dense(num_classes) # 输出 logits ]) logits model(x_batch) # shape: [B, C] labels y_batch # shape: [B], dtypeint32 # 推荐做法1直接使用 from_logitsTrue loss_fn tf.keras.losses.SparseCategoricalCrossentropy(from_logitsTrue) loss loss_fn(labels, logits) # 推荐做法2手动使用 log_softmax nll log_probs tf.nn.log_softmax(logits, axis-1) nll_loss tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(labels, logits))注意虽然 TensorFlow 提供了多种接口但底层逻辑一致——只要开启了from_logitsTrue系统就会自动采用基于log_softmax的稳定路径。相反如果错误地写成# ❌ 危险做法先 softmax 再取 log probs tf.nn.softmax(logits, axis-1) log_probs_bad tf.math.log(probs) # 当 probs≈0 时log→-inf不仅多了一次不必要的指数运算还可能导致log(0)出现-inf破坏梯度流。尤其在 FP16 训练中这种情况极为常见。再进一步思考为什么log_softmax在注意力机制中也如此重要考虑 Transformer 中的 self-attention$$\text{Attention}(Q,K,V) \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$当查询与键的相似度分数过高时例如某些 token 过度激活softmax可能产生接近 one-hot 的权重造成梯度稀疏更严重的是若分数达到几百以上直接计算exp就会溢出。因此许多优化实现都会改写为def stable_attention(qk_scaled): return tf.nn.softmax(qk_scaled, axis-1) # TF 内部已做 max-shift是的你没看错——尽管调用的是softmax但 TensorFlow 的tf.nn.softmax实现在某些版本中也加入了数值保护并非所有情况。然而这种保护并不总是启用也不如log_softmax彻底。而在 PyTorch 等框架中F.log_softmax的稳定性保障更为明确和广泛依赖。这也提醒我们不能完全依赖框架的“隐式修复”而应主动选择经过验证的稳定组合。回到最初的问题softmax和log_softmax到底差在哪维度tf.nn.softmaxtf.nn.log_softmax输出形式概率 (0~1)对数概率 (≤0)数值稳定性弱易溢出强内置 max-shift是否适合梯度计算否除非输入受控是训练首选典型用途推理阶段可视化训练阶段损失计算性能开销较低仅 expnormalize略高额外 log但可优化更重要的是在复合运算中log_softmax能与其他函数融合优化。例如交叉熵损失的本质是$$H(y, p) -\sum_i y_i \log p_i$$当 $ p_i \text{softmax}(z_i) $ 时$$\log p_i z_i - \log\left(\sum_j e^{z_j}\right)$$代入后可得$$H -\sum_i y_i z_i \log\left(\sum_j e^{z_j}\right)$$这正是sparse_categorical_crossentropy(from_logitsTrue)的底层公式。它跳过了中间生成概率的步骤直接从 logits 计算损失既快又稳。最后给出几点实践建议✅训练阶段一律使用from_logitsTrue的损失函数让框架自动走稳定路径。✅ 若需手动控制请优先使用tf.nn.log_softmax而非softmax log。✅ 在 FP16/混合精度训练中log_softmax不是“更好”而是“必须”。⚠️ 仅在推理、可视化或采样时才使用tf.nn.softmax查看实际概率。 注意log_softmax的输出不能直接用于tf.random.categorical采样需先tf.exp()还原或直接传入 logits 并由 API 内部处理。归根结底这个问题的背后反映的是深度学习工程中一个基本原则不要在不需要的地方引入不稳定的中间表示。softmax把 logits 映射到概率空间看似“更有意义”实则是增加了一个容易崩塌的中间层。而log_softmax直接在对数空间操作保留了足够的数值精度又能无缝对接后续的对数运算如损失计算实现了端到端的稳定性。这也正是现代深度学习框架的设计智慧所在——不是简单地实现数学公式而是理解其在真实硬件与复杂场景下的行为边界并做出工程级的改进。当你下次在代码中敲下loss(..., from_logitsTrue)时不妨想想背后那个默默做了 max-shift、拯救了无数训练进程的log_softmax。它或许不像 attention 那样耀眼却是支撑整个系统稳健运行的隐形支柱。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

建设企业网站企业网上银行哈尔滨住房和城乡建设厅网站

Linly-Talker在机场安检指引中的智能化升级应用 在大型国际机场的早高峰时段,安检通道前常常排起长队。不少旅客因不清楚“充电宝容量限制”或“液体携带标准”而反复询问工作人员,不仅拖慢通行效率,也加重了一线人员的沟通负担。更棘手的是&…

张小明 2026/1/11 16:03:41 网站建设

777fj做最好的网站网站建设要用到哪些应用工具

积层法如何重塑HDI板制造:从ABF材料到MSAP工艺的实战解析你有没有想过,为什么现在的智能手机主板能塞进那么多功能,却越来越薄?一块不到成人手掌大的电路板上,CPU、5G射频、电源管理、摄像头接口全都能紧凑布局&#x…

张小明 2026/1/10 8:46:40 网站建设

微信网站如何做找资料的免费网站

PyTorch实现NeRF神经辐射场三维重建 在自动驾驶感知系统调试中,工程师常面临一个尴尬问题:明明算法在仿真环境中表现完美,现实世界却频频“翻车”。这种虚实差异的核心之一,正是传统三维建模手段的局限性——激光雷达点云稀疏、多…

张小明 2026/1/10 8:46:42 网站建设

资格证网站怎么做温州手机网站制作哪家便宜

Unity游戏翻译深度解析:专业级自动翻译方案实战指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 在Unity游戏开发与体验中,语言障碍往往是影响玩家沉浸感的关键因素。XUnity.Au…

张小明 2026/1/10 8:50:19 网站建设

大同市住房与城乡建设厅网站wordpress仿站流程

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

张小明 2026/1/10 8:46:47 网站建设

扬州做网站的wordpress tag 拼音

ESP32音频开发终极指南:从零构建智能语音设备实战教程 【免费下载链接】ESP32-audioI2S Play mp3 files from SD via I2S 项目地址: https://gitcode.com/gh_mirrors/es/ESP32-audioI2S 你是否想过在ESP32上实现高品质音频播放?ESP32-audioI2S库为…

张小明 2026/1/12 12:27:51 网站建设