python - 'int' 对象没有属性 'size'"
问题描述
F.nll_loss:我得到
AttributeError:“int”对象没有属性“size”
当我尝试运行此代码时。我还得到了模块代码的片段。
raise ValueError('Expected 2 or more dimensions (got {})'.format(dim)) if input.size(0) != target.size(0):
raise ValueError('Expected input batch_size ({}) to match目标批处理大小({})。'
格式(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 循环从:
for data in train_dataset:
至
for data in train_loader:
推荐阅读
- javascript - 如何让我的搜索栏反应原生工作?
- go - 如何通过 grpc-gateway 处理多个端点?
- c++ - 标准中的哪里是模板参数的语法,例如,`std::function
` 定义? - flutter - 如何在颤动中调用圆形滑块的值?
- arrays - 创建一些重复数字的矩阵
- r - 如何为多个变量创建长宽格式数据的聚类图
- embedded - 操作系统更新后如何恢复嵌入式 CE 移动设备
- python - 虽然循环不读取条件
- javascript - 如何获取 JavaScript Date 对象中的日期差异?
- azure-logic-apps - 指定触发条件以减少 API 调用,而不是在流程本身中使用条件