【发布时间】:2021-08-30 12:33:13
【问题描述】:
这是来自 github 的基线模型;我试图产生它的结果 dataloader.py、models.py 已与此脚本放在同一方向
from __future__ import print_function
import sys
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
import torch.backends.cudnn as cudnn
import torchvision
import torchvision.transforms as transforms
import os
import sys
import time
import argparse
import datetime
from torch.autograd import Variable
if __name__ == '__main__':
import dataloader as dataloader
import models as models
parser = argparse.ArgumentParser(description='PyTorch Clothing-1M Training')
parser.add_argument('--lr', default=0.0008, type=float, help='learning_rate')
parser.add_argument('--start_epoch', default=2, type=int)
parser.add_argument('--num_epochs', default=3, type=int)
parser.add_argument('--batch_size', default=32, type=int)
parser.add_argument('--optim_type', default='SGD')
parser.add_argument('--seed', default=7)
parser.add_argument('--gpuid', default=1, type=int)
parser.add_argument('--id', default='cross_entropy')
args = parser.parse_args()
# Training
def train(epoch):
net.train()
train_loss = 0
correct = 0
total = 0
learning_rate = args.lr
if epoch > args.start_epoch:
learning_rate=learning_rate/10
for param_group in optimizer.param_groups:
param_group['lr'] = learning_rate
print('\n=> %s Training Epoch #%d, LR=%.4f' %(args.id,epoch, learning_rate))
for batch_idx, (inputs, targets) in enumerate(train_loader):
optimizer.zero_grad()
inputs, targets = Variable(inputs), Variable(targets)
outputs = net(inputs) # Forward Propagation
loss = criterion(outputs, targets) # Loss
loss.backward() # Backward Propagation
optimizer.step() # Optimizer update
train_loss += loss.data[0]
_, predicted = torch.max(outputs.data, 1)
total += targets.size(0)
correct += predicted.eq(targets.data).cpu().sum()
loader = dataloader.clothing_dataloader(batch_size=args.batch_size,num_workers=5,shuffle=True)
train_loader,val_loader = loader.run()
best_acc = 0
# Model
net = models.resnet50(pretrained=True)
net.fc = nn.Linear(2048,14)
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=args.lr, momentum=0.9, weight_decay=1e-3)
for epoch in range(1, 1+args.num_epochs):
train(epoch) # raise error !! (this is found by debugging)
这是回溯
Traceback (most recent call last):
.... File "d:\MLNT\MLNT\baseline.py", line 143, in <module>
loader = dataloader.clothing_dataloader(batch_size=args.batch_size,num_workers=5,shuffle=True)
NameError: name 'dataloader' is not defined
在调试过程中,“dataloader”和“models”作为变量存在 [1]:https://i.stack.imgur.com/QAXvi.png
这是调试回溯:
Exception has occurred: NameError (note: full exception trace is shown but execution is paused at: <module>)
name 'dataloader' is not defined
File "D:\MLNT\MLNT\baseline.py", line 143, in <module>
loader = dataloader.clothing_dataloader(batch_size=args.batch_size,num_workers=5,shuffle=True)
File "<string>", line 1, in <module> (Current frame)
【问题讨论】:
-
您是直接运行此文件还是从任何其他文件调用此文件?如果可能,请添加调试跟踪
-
您是否考虑过
if __name__ == '__main__':不正确的可能性? -
在调试过程中,“models”和“dataloader”已作为变量导入;所以这里是真的?
-
确定;我也添加了调试回溯
标签: python machine-learning pytorch