【问题标题】:How can I get rid of this ValueError我怎样才能摆脱这个 ValueError
【发布时间】:2017-05-12 10:41:25
【问题描述】:

权重和偏差

self.weights = { "layer1":tensorflow.Variable(tensorflow.random_normal([self.state_size, self.neurons_layer_1])), "layer2":tensorflow.Variable(tensorflow.random_normal([self.neurons_layer_1, self.neurons_layer_2])), "layerOut":tensorflow.Variable(tensorflow.random_normal([self.neurons_layer_2, self.action_size])) }
self.biases = { "layer1":tensorflow.Variable(tensorflow.random_normal([self.neurons_layer_1])), "layer2":tensorflow.Variable(tensorflow.random_normal([self.neurons_layer_2])), "layerOut":tensorflow.Variable(tensorflow.random_normal([self.action_size])) }

模型函数

def model(self, X, weights, biases):
    layer1 = tensorflow.add(tensorflow.matmul(X, weights["layer1"]),biases["layer1"])
    layer1 = tensorflow.nn.relu(layer1)

    layer2 = tensorflow.add(tensorflow.matmul(layer1, weights["layer2"]), biases["layer2"])
    layer2 = tensorflow.nn.relu(layer2)

    layerOut = tensorflow.add(tensorflow.matmul(layer2, weights["layerOut"]), biases["layerOut"])
    layerOut = tensorflow.nn.softmax(layerOut)

    with tensorflow.Session() as sess:
        init_op = tensorflow.global_variables_initializer()
        sess.run(init_op)
        q_values = sess.run(layerOut)
        return q_values

我这样计算预测值。状态是这样的列表:

predicted = self.model(state, self.weights, self.biases)    # state = [0.4, 0.3, 0.2, 0.9]

这些是我的占位符

X_placeholder = tensorflow.placeholder("float", [None, state_size])
Y_placeholder = tensorflow.placeholder("float", [None, action_size])

这是我的成本函数

cost = tensorflow.reduce_mean(tensorflow.square(right_prediction - predicted))

这是我的优化器

optimizer = tensorflow.train.AdamOptimizer(learning_rate=self.learning_rate).minimize(cost)

然后我初始化上面的变量

init = tensorflow.global_variables_initializer()

并运行会话

with tensorflow.Session() as sess:
                sess.run(init)

                for epoch in range(1):
                    sess.run(optimizer, feed_dict={X_placeholder:X , Y_placeholder:Y})

现在我运行这段代码,它会抛出以下错误。

ValueError: No gradients provided for any variable, check your graph for ops that do not 
support gradients, between variables ["<tf.Variable 'Variable:0' shape=(4, 24) 
dtype=float32_ref>", "<tf.Variable 'Variable_1:0' shape=(24, 24) dtype=float32_ref>", 
"<tf.Variable 'Variable_2:0' shape=(24, 2) dtype=float32_ref>", "<tf.Variable 
'Variable_3:0' shape=(24,) dtype=float32_ref>", "<tf.Variable 'Variable_4:0' shape=(24,) 
dtype=float32_ref>", "<tf.Variable 'Variable_5:0' shape=(2,) dtype=float32_ref>", 
"<tf.Variable 'Variable_6:0' shape=(4, 24) dtype=float32_ref>", "<tf.Variable 
'Variable_7:0' shape=(24, 24) dtype=float32_ref>", "<tf.Variable 'Variable_8:0' 
shape=(24, 2) dtype=float32_ref>", 
"<tf.Variable 'Variable_9:0' shape=(24,) dtype=float32_ref>", 
"<tf.Variable 'Variable_10:0' shape=(24,) dtype=float32_ref>", 
"<tf.Variable 'Variable_11:0' shape=(2,) 
dtype=float32_ref>"] and loss Tensor("Mean:0", shape=(), dtype=float32).

所以请帮帮我。

感谢您的关注。

编辑:好的,这是我的全部代码,我不知道这是否是通过此链接发布的合法,但 here 是。

【问题讨论】:

  • 你应该展示如何计算predicted
  • 好的,谢谢,我更新了。

标签: python machine-learning error-handling tensorflow


【解决方案1】:

错误表明从优化器到参数没有连接方式,换句话说,优化器不知道参数(权重和偏差)。

由于您没有发布整个代码,因此您似乎在一个类中定义了参数和模型,并在其外部使用优化器,以相同的方式执行它们,或者定义参数、模型、成本和类内部的优化器或在外部定义所有优化器。

【讨论】:

  • 谢谢。我用代码链接编辑了我的帖子。如果您能在我的代码上多解释一下,那就太好了。谢谢你阿里阿巴西。
  • 您的代码在训练和计算成本方面有很多错误,它们彼此无关,我无法编辑您的代码,因为您应该更改所有结构,而不是您可以查看在我的代码中:github.com/AliAbbasi/… 并像那样行事。为您的模型定义一个类,并将其中的所有内容定义为函数,包括参数函数、评分函数、成本和优化器函数,就像我定义的方式一样,如果您有任何问题,请随时在此处再次评论。
  • 好的,非常感谢。我现在将尝试以与您相同的结构重写它。但我看到一个问题。我的代码是强化学习结构(至少我尝试过),而你的代码是卷积神经网络。那么您有 DQN 模型的示例吗?感谢您的支持:)
  • 欢迎您,我很高兴能帮助您,不幸的是,我没有 DQN 模型示例。
  • 好的,我尝试编写新代码。但不幸的是,出现了新问题:D。所以也许你可以帮助我。我在这里提出了一个新问题:stackoverflow.com/questions/43942443/… 感谢您的帮助
猜你喜欢
  • 2021-01-27
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
  • 2022-10-18
  • 2020-01-05
  • 1970-01-01
  • 2020-10-24
  • 2011-03-12
相关资源
最近更新 更多