【问题标题】:ValueError: Model output "Tensor("activation_1/Identity:0", shape=(?, 3), dtype=float32)" has invalid shapeValueError:模型输出“Tensor("activation_1/Identity:0", shape=(?, 3), dtype=float32)" 的形状无效
【发布时间】:2021-09-23 21:12:55
【问题描述】:

我正在尝试运行以下 github 代码进行股市预测:

https://github.com/multidqn/deep-q-trading

按照他们的说明,我在安装所需的库后运行以下命令:

python main.py 3 0 results_folder

但是,当我运行上述命令时,出现以下错误:

Using TensorFlow backend.
WARNING:tensorflow:From /Users/anisschohra/.local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:68: The name tf.get_default_graph is deprecated. Please use tf.compat.v1.get_default_graph instead.

WARNING:tensorflow:From /Users/anisschohra/.local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:508: The name tf.placeholder is deprecated. Please use tf.compat.v1.placeholder instead.

WARNING:tensorflow:From /Users/anisschohra/.local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:3837: The name tf.random_uniform is deprecated. Please use tf.random.uniform instead.

Traceback (most recent call last):
  File "main.py", line 92, in <module>
    ensembleFolderName=sys.argv[3]
  File "/Users/anisschohra/deep-q-trading/deepQTrading.py", line 68, in __init__
    enable_double_dqn=True,enable_dueling_network=True)
  File "/Users/anisschohra/.local/lib/python3.7/site-packages/rl/agents/dqn.py", line 107, in __init__
    raise ValueError(f'Model output "{model.output}" has invalid shape. DQN expects a model that has one dimension for each action, in this case {self.nb_actions}.')
ValueError: Model output "Tensor("activation_1/Identity:0", shape=(?, 3), dtype=float32)" has invalid shape. DQN expects a model that has one dimension for each action, in this case 3.

您能帮我解决问题并成功运行代码吗?我一直在寻找错误,但没有找到有效的解决方案。他们的代码(main.py)中的模型架构如下:

model = Sequential()
model.add(Flatten(input_shape=(1,1,68)))
model.add(Dense(35,activation='linear'))
model.add(LeakyReLU(alpha=.001))
model.add(Dense(nb_actions))
model.add(Activation('linear'))

提前致谢。

【问题讨论】:

    标签: python deep-learning forecasting q-learning


    【解决方案1】:

    我和你有同样的问题,我对 RL 不太熟悉,但我想我找到了原因。

    if list(model.output.shape) != list((None, self.nb_actions)):
         raise ValueError(f'Model output "{model.output}" has invalid shape. DQN expects a model that has one dimension for each action, in this case {self.nb_actions}.')
    

    根据回溯,这是导致问题的代码。 您的模型的输出形状是张量对象,因此 list(model.output.shape) 将类似于 [Dimension(None), Dimension(3)],但 list((None, self.nb_actions)) 是 [None, 3],所以会判断为不同。

    所以我认为如果有一种方法可以将模型输出的形状转换为 numpy 或列表对象,我们可以解决这个问题。对不起我的英语不好!

    【讨论】:

    • 这并不能真正回答问题。如果您有其他问题,可以点击 提问。要在此问题有新答案时收到通知,您可以follow this question。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review
    猜你喜欢
    • 1970-01-01
    • 2018-04-25
    • 2020-06-09
    • 2019-09-17
    • 2019-10-23
    • 2019-07-18
    • 2018-04-27
    • 2019-09-24
    • 2019-04-22
    相关资源
    最近更新 更多