Tensorflow 使用Keras优化黑盒函数的LSTM
我正在尝试实现本文()中提出的递归神经网络架构,作者使用LSTM最小化黑盒函数(但假设它是可微的)。以下是拟议架构的示意图:。简单地说,我们的想法是使用一个类似于优化器的LSTM,它必须学习一个好的启发式方法,为未知函数y=f(parameters)提出新的参数,以便它朝着最小值移动。以下是建议程序的工作原理:Tensorflow 使用Keras优化黑盒函数的LSTM,tensorflow,keras,lstm,keras-layer,lstm-stateful,Tensorflow,Keras,Lstm,Keras Layer,Lstm Stateful,我正在尝试实现本文()中提出的递归神经网络架构,作者使用LSTM最小化黑盒函数(但假设它是可微的)。以下是拟议架构的示意图:。简单地说,我们的想法是使用一个类似于优化器的LSTM,它必须学习一个好的启发式方法,为未知函数y=f(parameters)提出新的参数,以便它朝着最小值移动。以下是建议程序的工作原理: 为参数p0和函数y0=f(p0) 使用input=[p0,y0]调用LSTM单元格,其输出是参数output=p1 评估y1=f(p1) 使用input=[p1,y1]调用LSTM单元格
p0
和函数y0=f(p0)
input=[p0,y0]
调用LSTM单元格,其输出是参数output=p1
y1=f(p1)
input=[p1,y1]
调用LSTM单元格,并获取output=p2
y2=f(p2)
y5=f(p5)
t=0
的开始猜测[p0,y0=f(p0)]
。如果我理解正确,该模型类似于一对多LSTM,但不同之处在于,下一时间步的输入不仅来自前一个单元格,还形成了一个附加函数的输出(在我们的示例f中)
我设法创建了一个自定义的tf.keras.layers.Layer
,它执行单个时间步长的计算(即它执行LSTM单元格,然后使用其输出作为函数f的输入):
但我不知道如何构建循环部分。我尝试手动操作,即执行以下操作:
my_cell = my_layer(units = 4)
outputs = my_cell(inputs)
outputs1 = my_cell(outputs)
outputs2 = my_cell(outputs1)
对吗?还有其他更合适的方法吗
附加问题:我想培训LSTM,使其不仅能够优化单个函数f,而且能够优化一类不同的函数[f1,f2,…]
,这些函数共享一些共同的结构,使得它们足够相似,可以使用相同的LSTM进行优化。我如何实现这样一个训练循环,它将函数列表作为输入,并尝试将其最小化?我的第一个想法是用“蛮力”的方式:在函数上使用for循环和一个tf.GradientTape
,它计算并应用每个函数的梯度
非常感谢您的帮助!
提前非常感谢!:)
my_cell = my_layer(units = 4)
outputs = my_cell(inputs)
outputs1 = my_cell(outputs)
outputs2 = my_cell(outputs1)