Python 另一个";ValueError:无法为张量';输入形状(30,5)的值;占位符:0';,其形状为';(?,30)和#x27&引用;

Python 另一个";ValueError:无法为张量';输入形状(30,5)的值;占位符:0';,其形状为';(?,30)和#x27&引用;,python,python-3.x,tensorflow,Python,Python 3.x,Tensorflow,好心点,我对TensorFlow不熟悉。我发现了一个培训政策梯度代理进行股票市场交易的项目,只培训每日收盘价。我还想让它在开放、高、低和音量特性上进行训练,所以我尝试将它们添加到现有代码中。我去掉了大部分项目,只留下诊断所需的东西 你可以找到我的。我已经尽了最大努力对每个部分进行评论,以便于浏览,以及我认为问题所在,但我需要有人告诉我问题所在和原因 我当前收到错误信息: ValueError: Cannot feed value of shape (30, 5) for Tensor 'Plac

好心点,我对TensorFlow不熟悉。我发现了一个培训政策梯度代理进行股票市场交易的项目,只培训每日收盘价。我还想让它在开放、高、低和音量特性上进行训练,所以我尝试将它们添加到现有代码中。我去掉了大部分项目,只留下诊断所需的东西

你可以找到我的。我已经尽了最大努力对每个部分进行评论,以便于浏览,以及我认为问题所在,但我需要有人告诉我问题所在和原因

我当前收到错误信息:

ValueError: Cannot feed value of shape (30, 5) for Tensor 'Placeholder:0', which has shape '(?, 30)'
ValueError: Cannot feed value of shape (35760, 5) for Tensor 'Placeholder:0', which has shape '(30, 5)'
…这是有道理的,因为
self.X=tf.compat.v1.placeholder(tf.float32,(None,self.state_size))
是为唯一的功能(Close)设计的,但我也在尝试将其他功能添加到状态中。
state\u size
30
window\u size
(在训练期间回顾30行)。我正在尝试改变状态,以包括添加的功能。因此,我尝试将占位符更改为
self.state\u size,5
,但随后出现错误:

ValueError: Cannot feed value of shape (30, 5) for Tensor 'Placeholder:0', which has shape '(?, 30)'
ValueError: Cannot feed value of shape (35760, 5) for Tensor 'Placeholder:0', which has shape '(30, 5)'
…我有点不清楚,但我认为这不是问题所在。我知道我正在尝试以一种它不期望的形状来输入张量数据,但我不知道如何自己调整它。(我想)我想做的是在
get_state
函数中添加这些额外的功能,这样每行都有一个窗口大小,每列都代表这些功能。然后,培训应该在迭代过程中进行

我在下面的链接中找到了类似的问题/答案,以帮助比我更了解这方面的人。他们中的大多数人谈论在占位符处重塑数据,我以为我已经尝试过了,但现在我已经超出了我的知识范围。提前谢谢

更新

孩子,我自己肯定很难弄明白这一点,但我感谢迄今为止的指导,我想我已经接近了,我只是对改变什么知之甚少。根据下面的答案,我知道我的窗口大小/行数可能会根据窗口大小/回望值的不同而变化,因此这将是占位符的非部分,在这种特殊情况下,我将提前知道功能的数量(在本例中为5),以便将其设置为静态数字(5)就足够了。因此,我尽量不为我要添加的每个新功能设置单独的占位符

因此,尝试使用新的占位符
self.X=tf.compat.v1.placeholder(tf.float32,(None,5))
现在我得到的错误是:

    InvalidArgumentError: Incompatible shapes: [3270,3] vs. [98100,3]
     [[{{node sub}}]]

During handling of the above exception, another exception occurred:

InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-4-78f4afe280e1> in <module>()
     22          skip = skip)
     23 
---> 24 agent.train(iterations = 500, checkpoint = 10, initial_money = initial_money)

<ipython-input-3-1788840ff10e> in train(self, iterations, checkpoint, initial_money)
    135             cost, _ = self.sess.run([self.cost, self.optimizer], feed_dict={self.X:np.vstack(ep_history[:,0]),
    136                                                     self.REWARDS:ep_history[:,2],
--> 137                                                     self.ACTIONS:ep_history[:,1]})
    138 
    139 
…作为状态(5列功能和30行窗口大小)、操作(0)、起始资金(10000)和下一个状态(同样是数据集的下一行/未来行的5 x 30)

那么现在的问题是什么呢?是阵列吗?我为冗长的代码感到抱歉,但我想对那些帮助我的人说得透彻一点,并表明我实际上正在努力理解修复背后的逻辑,以便以后可以应用它。有进一步的意见吗?是否与
get\u state
功能有关?(在我完成这项工作时,我在colab书中添加了一些额外的注释)。非常感谢。

您已经使用“self.X”作为第一层的输入,因为模型行数(数据点)可能会有所不同,但在训练和预测期间,特征数应该相同,因为这决定了该层上的神经元数量

但是,您可以对具有不同数量特征的数据重用代码,以创建不同的模型,但对于一个模型,代码必须保持不变

self.X=tf.compat.v1.placeholder(tf.float32,(无,特征号))

当你们开始训练时,你们必须知道你们输入的特征尺寸,以后不能改变。如果您想跟踪其他内容,则需要为此创建其他变量,或者您可以在创建tensorflow图之前预处理数据以了解特征编号

(35760,5)
np.vstack(ep_history[:,0])的形状?这看起来像是一个时间序列-尝试一个循环模型(例如LSTM)而不是一个完全连接的网络是否有意义?@rvinas你是对的,这是一个时间序列问题,我也有一个LSTM,但我有很多不同的类似模型,我想先弄清楚如何实现这一变化。我已经更新了我上面的问题,提供了一些可能有帮助的信息???@rvinas我想回答你的问题,np.vstack(ep_history[:,0])的形状应该是30行x 5列,5个特性和30行窗口大小,应该在上面显示。谢谢你能分享你的数据吗。我尝试在不同的环境下做,而colab不是我的最爱one@eugen只要下载这个文件,我的数据就是这样的:谢谢你的帮助,但是我现在遇到了一个新的错误。我已经更新了我上面的问题,希望你的意见。我试图表明我正在尽最大努力解决这个问题!让我知道你的想法。如果可以的话,我希望能够为每个特征使用一个占位符而不是几个占位符?我建议在每个步骤中查看张量的形状,并验证它是否符合您的预期。就像你可以打印“奖励.形状”来检查它的形状。错误信息表明在形状张量之间不可能进行某些操作。我想我知道问题是什么,但不确定应该在哪里找到它。因此,
ep_history
数组的形状是(3270,4),其中[0]是我的vstack 5个特征,[1]是动作,[2]是奖励。提到
不兼容形状[3270,3]与[98100,3]
错误时,错误指向回溯中的
self.ACTIONS
。我的a