我正在尝试使用迁移学习,从 ResNet50 模型开始,我得到一个 AttributeError,如下所示:
6 for (x,y) in iterator:
7 x = x.to(device)
----> 8 y = y.to(device)
9
10 optimizer.zero_grad()
AttributeError: 'tuple' object has no attribute 'to'
这是我的源代码:
def train(model, iterator, optimizer, criterion, scheduler, device):
epoch_loss = 0
epoch_acc_1 = 0
epoch_acc_5 = 0
model.train()
for (x,y) in iterator:
x = x.to(device)
y = y.to(device)
optimizer.zero_grad()
y_pred = model(x)
loss = criterion(y_pred[0], y)
acc_1, acc_5 = calculate_topk_accuracy(y_pred[0],y)
loss.backward()
optimizer.step()
epoch_loss += loss.item()
epoch_acc_1 += acc_1.item()
epoch_acc_5 += acc_5.item()
epoch_loss /= len(iterator)
epoch_acc_1 /= len(iterator)
epoch_acc_5 /= len(iterator)
return epoch_loss, epoch_acc_1, epoch_acc_5
#learning part
best_valid_loss = float('inf')
EPOCHS = 10
scheduler = schedule
for epoch in range(EPOCHS):
start_time = time.monotonic()
train_loss, train_acc_1, train_acc_5 = train(model, train_iterator, optimizer, criterion, scheduler, device)
valid_loss, valid_acc_1, valid_acc_5 = evaluate(model, valid_iterator, criterion, device)
if valid_loss < best_valid_loss:
best_valid_loss = valid_loss
torch.save(model.state_dict(),'C:\catanddog\data/ResNet-model.pt')
end_time = time.monotonic()
epoch_mins, epoch_secs = epoch_time(start_time, end_time)
print(f'Epoch:{epoch+1:02} ¦ Epoch Time : {epoch_mins}m {epoch_secs}s')
print(f'\tTrain Loss: {train_loss:.3f} ¦ Train Acc @1 : {train_acc_1*100:6.2f}% ¦ ' \
f'Train Acc @5: {train_acc_5*100:6.2f}%')
print(f'\tValid Loss: {valid_loss:.3f} ¦ Valid Acc @1 : {valid_acc_1*100:6.2f}% ¦ ' \
f'Valid Acc @5: {valid_acc_5*100:6.2f}%')
我是一名大学生,这是我的第一个深度学习项目。我以前从未使用过 python 或类似的东西。
我想知道如何解决错误,如果还有其他错误,我也想知道。