ValueError: 没有可优化的变量

我正在尝试计算两张图像之间的l2_loss并获取它们的gradient。这里是我的代码片段:

with tf.name_scope("train"):    X = tf.placeholder(tf.float32, [1, None, None, None], name='X')    y = tf.placeholder(tf.float32, [1, None, None, None], name='y')    Z = tf.nn.l2_loss(X - y, name="loss")    step_loss = tf.reduce_mean(Z)    optimizer = tf.train.AdamOptimizer()    training_op = optimizer.minimize(step_loss)init = tf.global_variables_initializer()with tf.Session() as sess:    init.run()    content = tf.gfile.FastGFile('cat.0.jpg', 'rb').read()    noise = tf.gfile.FastGFile('color_img.jpg', 'rb').read()    loss_append = []    for epoch in range(10):        for layer in layers:            c = sess.run(layer, feed_dict={input_img: content})            n = sess.run(layer, feed_dict={input_img: noise})            sess.run(training_op, feed_dict={X: c, y: n})

但它给出了以下错误:

    Traceback (most recent call last):   File "/home/noise_image.py",     line 68, in <module>    training_op = optimizer.minimize(lossss)   File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training /optimizer.py", line 315, in minimize    grad_loss=grad_loss)   File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/training   /optimizer.py", line 380, in compute_gradients    raise ValueError("No variables to optimize.")ValueError: No variables to optimize. 

如何解决这个问题?


回答:

您构建的图中没有变量节点。您也在尝试在没有变量的情况下最小化损失函数。

最小化指的是为数学函数(成本函数)的变量找到一组值,当这些值代入函数时,得到的最小可能值(至少是局部最小值,因为我们通常处理的是非凸函数)。

因此,当您运行代码时,编译器抱怨您的成本函数中没有变量。澄清一下,placeholder指的是在运行时用于向图的各种输入提供值的对象。

要解决这个问题,您需要重新考虑您试图构建的图。您必须定义变量,类似这样:(忽略与此问题无关的代码部分)

with tf.name_scope("train"):    X = tf.placeholder(tf.float32, [1, 224, 224, 3], name='X')    y = tf.placeholder(tf.float32, [1, 224, 224, 3], name='y')     X_var = tf.get_variable('X_var', dtype = tf.float32, initializer = tf.random_normal((1, 224, 224, 3)))    y_var = tf.get_variable('y_var', dtype = tf.float32, initializer = tf.random_normal((1, 224, 224, 3)))    Z = tf.nn.l2_loss((X_var - X) ** 2 + (y_var - y) ** 2, name="loss")    step_loss = tf.reduce_mean(Z)    optimizer = tf.train.AdamOptimizer()    training_op = optimizer.minimize(step_loss)...with tf.Session() as sess:    ....    sess.run(training_op, feed_dict={X: c, y: n})

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注