这是一个很长的标题,但希望我能用几句话正确地解释自己:
我正在尝试使用 Tensorflow 最小化给定的得分函数,灵感来自于Minimize a function of an variable in Tensorflow 中发表的内容。这种评分函数的值是通过调用一个 Matlab 脚本获得的,该脚本只需要提供一个参数(与输入变量相关,一个张量)。
为此,我使用了 Tensorflow 2.0 的 beta 版本,其中包括一个称为急切执行的功能,它允许访问每个张量的内容,而无需运行任何会话。
在这里,您可能会发现我的代码的草稿:
import tensorflow as tf
import numpy as np
eng = matlab.engine.start_matlab()
def costFunction():
z = tf.add(x,y).numpy()
H = np.asarray(eng.matlabfunction(matlab.double(z.tolist()),...)) # There are other parameters (Python lists) to be passed as arguments to my Matlab script alongside them, not included for the sake of simplicity
h = tf.convert_to_tensor(...) # Here I retrieve those elements from matrix H which I actually aim to maximize
return h
x = tf.Variable(initial_value=tf.zeros([6,N], tf.float64), trainable=True)
opt = tf.optimizers.Adam(learning_rate=1e-5, beta_1=0.9, beta_2=0.999, epsilon=1e-8)
iters = 1000
for i in range(iters):
train = opt.minimize(costFunction, tunedPhases)
if i % 100 == 0:
print("Iteration {}, loss: {}".format(i+1, costFunction()))
可悲的是,此解决方案仍然无法解决,因为我收到以下错误消息作为输出:
ValueError: No gradients provided for any variable: ['Variable:0'].
经过详尽的搜索,我认为这个问题与这篇旧帖子有关(TensorFlow: 'ValueError: No gradients provided for any variable'),这是通过直接从成本函数到张量进行相应操作来解决的。但是,我别无选择,只能调用此 matlab 函数并将其输出用作成本函数的输出。
您对如何克服这一点有任何想法吗?
非常感谢您,祝大家度过愉快的一周!