Получение ошибки «AttributeError: объект NoneType» не имеет атрибута «shape» »при реализации прорыва Atari - PullRequest
1 голос
/ 12 апреля 2020

Я сделал код для решения проблемы Atari Breakout. У меня небольшая проблема, но я не могу сказать, что это.

Вот код

Это проблема с памятью воспроизведения.

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

Проблема в том, где эти строки. set_trace() используется для всплывающей интерактивной оболочки. Оттуда, если я запускаю 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'

Как я могу улучшить этот код, чтобы избежать такой ошибки?

1 Ответ

2 голосов
/ 13 апреля 2020

Ошибка говорит вам о проблеме. Вы пытаетесь вызвать shape на None, поэтому в вашем коде некоторая переменная a равна None, и вы вызываете shape для нее, то есть a.shape. Это одна из самых распространенных ошибок в программировании!

В вашем for l oop

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...