【发布时间】:2020-05-03 02:14:39
【问题描述】:
我对机器学习和 Python 比较陌生。
我有一个系统,它由一个 NN 组成,其输出被馈送到一个未知的非线性函数 F,例如一些硬件。这个想法是将NN训练为该未知非线性函数F的逆F^(-1)。这意味着在F的输出处计算损失L。但是,不能以直接的方式使用反向传播来计算梯度并更新 NN 权重,因为 F 的梯度也不知道。
有什么方法可以使用不直接连接到 NN 的损失函数 L 来计算 TensorFlow 或 PyTorch 中的梯度?或者要承担使用任何其他软件(Matlab、C 等)获得的损失,将其用于反向传播?
- 据我所知,Keras keras.backend.gradients 只允许计算连接权重的梯度,否则梯度为零或 NoneType。
- 我了解了 TensorFlow 中的 stop_gradient() 函数。但我不确定这是否是我想要的。它允许在反向传播期间不计算某些变量的梯度。但我认为操作 F 无论如何都不会被解释为变量。
- 我能否定义任意损失函数(包括硬件测量)并将其用于 TensorFlow 中的反向传播,或者它是否也需要连接到图?
如果我的问题不够具体,请告诉我。
【问题讨论】:
标签: tensorflow neural-network pytorch gradient backpropagation