Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tensorflow中的无导数学习算法_Python_Tensorflow - Fatal编程技术网

Python Tensorflow中的无导数学习算法

Python Tensorflow中的无导数学习算法,python,tensorflow,Python,Tensorflow,我试图在Tensorflow中实现一个无导数学习算法。例如,我们讨论了一种不使用反向传播的学习算法 据我所知,默认优化器都实现反向传播。 我可以按如下所述操作渐变值: #创建一个优化器。 opt=梯度下降优化(学习率=0.1) #计算变量列表的梯度。 梯度和变量=选择计算梯度(损失) #grads_和_vars是元组列表(梯度、变量)。你做什么就做什么 #需要添加“渐变”部分,例如封盖等。 有上限的年级和变量=[(我的上限(gv[0]),gv[1]),适用于年级和变量中的gv] #请优化器应用带

我试图在Tensorflow中实现一个无导数学习算法。例如,我们讨论了一种不使用反向传播的学习算法

据我所知,默认优化器都实现反向传播。 我可以按如下所述操作渐变值:

#创建一个优化器。
opt=梯度下降优化(学习率=0.1)
#计算变量列表的梯度。
梯度和变量=选择计算梯度(损失)
#grads_和_vars是元组列表(梯度、变量)。你做什么就做什么
#需要添加“渐变”部分,例如封盖等。
有上限的年级和变量=[(我的上限(gv[0]),gv[1]),适用于年级和变量中的gv]
#请优化器应用带封顶的渐变。
选择应用梯度(上限梯度和变量)
但我看不到一种实现不依赖反向搜索的学习算法的方法。另外,我想要使用的forumla不需要导数,所以我认为根本不需要计算梯度


有没有办法修改/创建一个优化器,以使用反向传播以外的另一种方法来调整权重?

尽管我还没有实现自己的优化器,但我仔细检查了TensorFlow体系结构,因为我目前正在为它编写包装器

据我所知,您可以通过扩展类来实现自己的优化器(就像目前在TensorFlow中实现的所有其他优化器一样)

随便讲,TysFooad中的优化器由Python(或任何其他客户端语言)和C++部分组成。后者实现核心功能,即TensorFlow图中的Ops,如定义的训练Ops

优化器的Python部分将Ops添加到图形定义中。它提供传递给Ops的参数,并对优化器进行一些高级管理

以下是我建议您可以尝试的:

  • 编写自己的基本优化器类的实现

  • 要实现公式,必须定义Op,如中所述

  • # Create an optimizer.
    opt = GradientDescentOptimizer(learning_rate=0.1)
    
    # Compute the gradients for a list of variables.
    grads_and_vars = opt.compute_gradients(loss, <list of variables>)
    
    # grads_and_vars is a list of tuples (gradient, variable).  Do whatever you
    # need to the 'gradient' part, for example cap them, etc.
    capped_grads_and_vars = [(MyCapper(gv[0]), gv[1]) for gv in grads_and_vars]
    
    # Ask the optimizer to apply the capped gradients.
    opt.apply_gradients(capped_grads_and_vars)