实现 Atari Breakout 时出现错误"AttributeError: 'NoneType' object has no attribute 'shape'"



我制作了一个代码来解决Atari Breakout。我面临一个小问题,但我不能说是什么。

这是代码

这是重播内存的问题。

try:
next_states = torch.tensor(batch[3], dtype=torch.float32) 
except:
import ipdb; ipdb.set_trace()

问题出在那些线路的哪里。set_trace()用于弹出一个交互式shell。从那里,如果我运行for i in range(batch_size): print(batch[3][i].shape),我得到了这个输出

ipdb> for i in range(32): print(batch[3][i].shape)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
(4, 84, 84)
*** AttributeError: 'NoneType' object has no attribute 'shape'

如何改进代码以避免此类错误?

错误会告诉您问题所在。您正试图在None上调用shape,因此,在您的代码中,一些变量aNone,您正在对其调用shape,即a.shape。这是编程中最常见的错误之一!

在您的for循环中

for i in range(32): 
print(batch[3][i].shape)

在某个时刻,batch[3][i]就是None,所以您必须弄清楚batch[3]包含什么以及为什么它是None

查看此处的讨论https://chat.stackexchange.com/transcript/message/54070403#54070403.

相关内容

  • 没有找到相关文章

最新更新