PyTorch 错误与缩放器浮动的预期对象,而是得到缩放器长的对象
Posted
技术标签:
【中文标题】PyTorch 错误与缩放器浮动的预期对象,而是得到缩放器长的对象【英文标题】:PyTorch error with expected object of scaler float but instead got object of scaler Long 【发布时间】:2019-05-30 03:39:33 【问题描述】:所以我正在学习关于 Udemy(人工智能 a-z)的课程,但我遇到了一个错误,其中显示以下内容: 返回地图(lambda x:变量(torch.cat(x,0)),样本) RuntimeError: 标量类型 Float 的预期对象,但在位置 #1“张量”的序列参数中的序列元素 1 获得标量类型 Long
元素似乎每次都在变化,所以我不知道问题可能出在哪里 有人可以帮我解决这个问题吗?
我已经尝试修改上一行(示例)以查看是否需要将其转换为 Long,但它不起作用,除非做错了
包含 ai.py 的第 43-45 行
def sample(self, batch_size):
samples = zip(*random.sample(self.memory, batch_size))
return map(lambda x: Variable(torch.cat(x, 0)), samples)
包含 ai.py 的第 74-87 行(调用示例方法的内容)
def update(self, reward, new_signal):
new_state = torch.Tensor(new_signal).float().unsqueeze(0)
self.memory.push((self.last_state, new_state,
torch.LongTensor([int(self.last_action)]),
torch.tensor([self.last_reward])))
action = self.select_action(new_state)
if len(self.memory.memory) > 100:
batch_state, batch_next_state, batch_reward, batch_action =
self.memory.sample(100)
self.learn(batch_state, batch_next_state, batch_reward, batch_action)
self.last_action = action
self.last_state = new_state
self.last_reward = reward
self.reward_window.append(reward)
if len(self.reward_window) > 1000:
del self.reward_window[0]
return action
说实话,我希望程序的其余部分能够运行,但它似乎总是在这里崩溃,抱歉我不能更具体地说明我的期望,那是因为我不知道这是我第一次制作一个合适的人工智能
【问题讨论】:
我不知道代码没有格式化什么 试试torch.cat(x, 0.)
吧。它不喜欢int
。
【参考方案1】:
根据https://pytorch.org/docs/stable/torch.html#torch.cat,您的x
中的return map(lambda x: Variable(torch.cat(x, 0)), samples)
中的所有张量都需要具有相同的类型。但是你在
self.memory.push((self.last_state, new_state,
torch.LongTensor([int(self.last_action)]),
torch.tensor([self.last_reward])))
所以这就是它抛出异常的原因。
【讨论】:
以上是关于PyTorch 错误与缩放器浮动的预期对象,而是得到缩放器长的对象的主要内容,如果未能解决你的问题,请参考以下文章
在 Pytorch 中为 HDF5 文件创建数据集和数据加载器时出现问题:没有足够的值来解包(预期 2,得到 1)
Pytorch模型训练实用教程学习笔记:四优化器与学习率调整
PyTorch - RuntimeError:后端 CPU 的预期对象,但为参数 #2 'weight' 获得了后端 CUDA