【问题标题】:data loader is not defined but I have imported it数据加载器未定义,但我已导入它
【发布时间】: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


【解决方案1】:

如果您将此文件导入另一个文件,则条件__name__ == '__main__' 不会是True,因此dataloadermodels 都不会导入到您的文件中。

if __name__ == '__main__':
    import dataloader as dataloader
    import models as models

相反,您可以直接将两者导入:

import dataloader as dataloader    
import models as models

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-16
    • 2020-08-01
    • 2014-01-18
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    相关资源
    最近更新 更多