在 Keras/Tensorflow 中创建自定义损失函数时指定梯度函数

问题描述

到目前为止,我使用 Keras/Tensorflow 只是通过使用预定义的损失函数、优化器、数据集等来接触深度学习。

我现在有兴趣在 Keras/Tensorflow 中为分类模型创建自定义损失函数(尽管我的问题也与回归模型相关)。我在书中和 stackoverflow 上看到过几个自定义损失函数的例子,创建这样的函数不是问题。

(我对损失函数有一些想法,但我在这里的问题并不针对其中任何一个。)

但是,我知道要执行反向传播,需要计算我的损失函数相对于模型参数的梯度。所以反向传播需要计算损失对 softmax 输出的导数,softmax 输出对前一层的导数,依此类推(通过链式法则)。

问题

  1. 用户/建模者是否需要在纸上计算第一组导数(损失函数softmax),然后将其显式实现为一个函数,以便它可以“插入”Keras/TF?我见过的所有示例都使用 autodiff,我相信它在数值上近似于所有这些,并且不需要用户实现任何梯度计算。我正在考虑的方法是指定损失与输出的梯度,然后让 autodiff 担心早期级别的所有其他梯度。我的猜测是这个问题的答案是否定的,因为我从未见过它记录在案。我想这正是 autodiff 所做的:自动微分而无需担心损失函数函数形式。
  2. 即使不需要指定任何渐变,也有可能吗?
  3. 假设有可能,这样做是否可以通过提高输出层梯度的准确性来加速反向传播?

我得到的印象是您只提供损失函数自定义或预定义)。您让 autodiff 处理所有梯度计算,而不必担心函数形式。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...