我想为Keras实现一个新的优化函数,它不是基于参数的偏导数,而是基于这些偏导数的导数。我该如何继续呢?
发布于 2019-10-14 02:01:44
首先,您可以通过查看code for the current optimizers来创建自定义优化器。
您可以看到,可以通过将keras.optimizers.Optimizer子类化来定义优化器
from keras.optimizers import Optimizer
class CustomOptimizer(Optimizer):
def __init__(self, custom, parameters, **kwargs):
self.custom = custom
self.parameters = parameters
# ...
super().__init__(kwargs)
def get_updates(self, loss, params):
# calculate the updates for the parameters
grads = self.get_gradients(loss, params) # as implemented in `Optimizer`
# ...
self.updates = # your updates
return self.updates
def get_config(self):
return {'custom': custom, 'parameters': parameters}在这里,我相信你可以用与get_gradients()实现相同的方式在get_updates()中计算梯度的导数(看看Keras的代码)。
发布于 2019-10-20 05:13:01
事实上,在看了2-3次优化器的Keras代码后,我不仅很快放弃了理解所有东西的尝试,而且对我来说,get_updates函数似乎只是返回已经计算出的梯度,其中我寻求直接访问参数的偏导函数,以便使用这些导数的导数。所以梯度是没用的..。
https://stackoverflow.com/questions/58365610
复制相似问题