【问题标题】:'int' object has no attribute 'size'"'int' 对象没有属性 'size'"
【发布时间】:2020-01-11 02:50:05
【问题描述】:

F.nll_loss:我得到了

AttributeError: 'int' 对象没有属性 'size'

当我尝试运行此代码时。我还得到了模块代码的 sn-p。

raise ValueError('预期 2 或更多维度 (得到 {})'.format(dim)) 如果 input.size(0) != target.size(0):
raise ValueError('预期输入 batch_size ({}) 以匹配目标 batch_size ({})。'
格式(input.size(0), target.size(0)))

import torch
from torchvision import transforms, datasets
import torch.nn as nn
import torch.nn.functional as F
import matplotlib.pylab as plt

train_dataset = datasets.MNIST(root = '', train =True, download = True,
                                transform =transforms.Compose([transforms.ToTensor()]))

test_dataset = datasets.MNIST(root ='', download =True, train =False,
                               transform =transforms.Compose([transforms.ToTensor()]))
batch_size = 10
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size, shuffle =True)

test_dataset = torch.utils.data.DataLoader(test_dataset, batch_size, shuffle =True)
class Net(nn.Module):

  def __init__(self):
    super().__init__()
    self.fc1 = nn.Linear(28*28, 64)
    self.fc2 = nn.Linear(64,64)
    self.fc3 = nn.Linear(64,64)
    self.fc4 = nn.Linear(64,10)

  def forward(self, x):
      x = F.relu(self.fc1(x))
      x = F.relu(self.fc2(x))
      x = F.relu(self.fc2(x))
      x = self.fc4(x)
      return F.log_softmax(x, dim=1)

x=torch.rand((28,28))
x=x.view(-1,28*28)
net =Net()
out=net(x)
out
import torch.optim as optim

optimizer =optim.Adam(net.parameters(), lr=0.001)

EPOCHS = 3
for epoch in range(EPOCHS):
  for data in train_dataset:
      x, y = data
      net.zero_grad()
      x=x.view(-1, 28*28)
      output = net(x)
      loss = F.nll_loss(output, y)
      loss.backward()
      optimizer.step()
  print(loss)

【问题讨论】:

  • 你能分享整个错误信息吗?
  • 感谢您的意图。错误出现在 for 循环中,我刚刚发布了正确的循环。 EPOCHS = 3 for epoch in range(EPOCHS): for data in train_loader: x, y = data net.zero_grad() x=x.view(-1, 28*28) output = net(x) loss = F.nll_loss (输出, y) loss.backward() optimizer.step() print(loss)
  • 不可能是整个错误信息,对吧?
  • 不,我使用的答案是“用于 train_dataset 中的数据”而不是“用于 train_loader 中的数据”
  • 我不确定我是否理解。我只是想查看所有相关代码以及您收到的错误消息。

标签: python deep-learning artificial-intelligence pytorch


【解决方案1】:

只需将 for 循环更改为:

for data in train_dataset:

for data in train_loader:

【讨论】:

    猜你喜欢
    • 2022-07-22
    • 2023-04-09
    • 2017-07-22
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多