鱼C论坛

 找回密码
 立即注册
查看: 1920|回复: 4

报错AttributeError: 'collections.OrderedDict' object has no attribute 'cuda'

[复制链接]
发表于 2021-11-6 17:49:01 | 显示全部楼层 |阅读模式
50鱼币
在有GPU的情况下
语句netG = netG.cuda()报错
AttributeError: 'collections.OrderedDict' object has no attribute 'cuda'

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-6 18:32:40 From FishC Mobile | 显示全部楼层
完整报错发上来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-6 18:50:49 | 显示全部楼层
netG不是tensor,没有cuda属性。
贴一下你的代码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-11-6 20:14:04 | 显示全部楼层
  1. from __future__ import print_function

  2. from miscc.config import cfg, cfg_from_file
  3. from datasets import TextDataset
  4. from miscc.utils import mkdir_p
  5. from datasets import prepare_data
  6. from PIL import Image
  7. from miscc.utils import truncated_normal_

  8. import os
  9. import sys
  10. import random
  11. import pprint
  12. import datetime
  13. import dateutil.tz
  14. import argparse
  15. import numpy as np
  16. import h5py
  17. import torch.backends.cudnn as cudnn
  18. from nltk.tokenize import RegexpTokenizer

  19. import torch
  20. import torchvision.transforms as transforms
  21. from torch.autograd import Variable

  22. if sys.version_info[0] == 2:
  23.     import cPickle as pickle
  24. else:
  25.     import pickle



  26. dir_path = (os.path.abspath(os.path.join(os.path.realpath(__file__), './.')))
  27. sys.path.append(dir_path)

  28. def parse_args():
  29.     parser = argparse.ArgumentParser(description='Train a AttnGAN network')
  30.     parser.add_argument('--cfg', dest='cfg_file',
  31.                         help='optional config file',
  32.                         default='cfg/bird_attn2.yml', type=str)
  33.     parser.add_argument('--gpu', dest='gpu_id', type=int, default=-1)
  34.     parser.add_argument('--data_dir', dest='data_dir', type=str, default='')###############
  35.     parser.add_argument('--manualSeed', type=int, help='manual seed')
  36.     args = parser.parse_args('--cfg cfg/eval_bird.yml --gpu 0'.split())
  37.     #args = parser.parse_args()

  38.     return args

  39. if __name__ == "__main__":

  40.     args = parse_args()
  41.     if args.cfg_file is not None:
  42.         cfg_from_file(args.cfg_file)

  43.     if args.gpu_id != -1:
  44.         cfg.GPU_ID = args.gpu_id
  45.     else:
  46.         cfg.CUDA = False

  47.     if args.data_dir != '':
  48.         cfg.DATA_DIR = args.data_dir
  49.     print('Using config:')
  50.     pprint.pprint(cfg)

  51.     B_VALIDATION = cfg.B_VALIDATION
  52.     torch.cuda.set_device(cfg.GPU_ID)
  53.     cudnn.benchmark = True

  54.     args.manualSeed = 100
  55.     random.seed(args.manualSeed)
  56.     np.random.seed(args.manualSeed)
  57.     torch.manual_seed(args.manualSeed)
  58.     if cfg.CUDA:
  59.         torch.cuda.manual_seed_all(args.manualSeed)

  60.     now = datetime.datetime.now(dateutil.tz.tzlocal())
  61.     timestamp = now.strftime('%Y_%m_%d_%H_%M_%S')
  62.     output_dir = '../output/%s_%s_%s' % \
  63.         (cfg.DATASET_NAME, cfg.CONFIG_NAME, timestamp)

  64.     split_dir = 'test'
  65.     bshuffle = True

  66.     imsize = cfg.TREE.BASE_SIZE * (2 ** (cfg.TREE.BRANCH_NUM - 1))
  67.     image_transform = transforms.Compose([
  68.         transforms.Scale(int(imsize * 76 / 64)),
  69.         transforms.RandomCrop(imsize),
  70.         transforms.RandomHorizontalFlip()])
  71.     dataset = TextDataset(cfg.DATA_DIR, split_dir,
  72.                           base_size=cfg.TREE.BASE_SIZE,#########################################
  73.                           transform=image_transform)
  74.     assert dataset
  75.     dataloader = torch.utils.data.DataLoader(
  76.         dataset, batch_size=cfg.TRAIN.BATCH_SIZE,
  77.         drop_last=True, shuffle=bshuffle, num_workers=int(cfg.WORKERS))
  78.     #load_state_dict


  79.     netT = torch.load(cfg.TRAIN.NET_T)############################################
  80.     text_encoder = torch.load(cfg.TRAIN.NET_E)
  81.     #netG = torch.load('/content/drive/MyDrive/CPGAN-master/models/NET_G.pkl')

  82.     #netG = torch.load_state_dict(cfg.TRAIN.NET_G,map_location='cuda:0')
  83.     netG = torch.load(cfg.TRAIN.NET_G)#,map_location='cuda:0')#################################################################################

  84.     netT = netT.cuda()
  85.     netG = netG.cuda()
  86.     text_encoder = text_encoder.cuda()

  87.     if split_dir == 'test':
  88.         split_dir = 'valid'

  89.     batch_size = cfg.TRAIN.BATCH_SIZE
  90.     nz = cfg.GAN.Z_DIM

  91.     with torch.no_grad():
  92.         noise = Variable(torch.FloatTensor(batch_size, nz))#, volatile=True
  93.     noise = noise.cuda()
  94.     save_dir = '../outputs/Inference_Images'
  95.     mkdir_p(save_dir)

  96.     if B_VALIDATION:
  97.         cnt = 0
  98.         cap_dir = save_dir + '/caption.h5'
  99.         cap_len_dir = save_dir + '/caption_len.h5'
  100.         memory_dir = save_dir + '/memory.h5'
  101.         f_cap = h5py.File(cap_dir, 'w')
  102.         f_len = h5py.File(cap_len_dir, 'w')
  103.         f_memory = h5py.File(memory_dir, 'w')
  104.         with torch.no_grad():#############################################################################################
  105.             for step, data in enumerate(dataloader, 0):
  106.                 cnt += batch_size
  107.                 if step % 100 == 0:
  108.                     print('step: ', step)

  109.                 # imgs, captions, cap_lens, class_ids, keys, memory = prepare_data(data)
  110.                 captions, cap_lens, class_ids, keys, memory = prepare_data(data)
  111.                 for i in range(batch_size):
  112.                     key = keys[i]
  113.                     caption = captions[i]
  114.                     caption = caption.unsqueeze(1)
  115.                     caption = caption.cpu()
  116.                     caption = caption.numpy()
  117.                     f_cap[key] = caption
  118.                     mem = memory[i]
  119.                     mem = torch.transpose(mem, 1, 0)
  120.                     mem = mem.cpu()
  121.                     mem = mem.numpy()
  122.                     f_memory[key] = mem
  123.                     cap_len = cap_lens[i].item()
  124.                     f_len[key] = cap_len

  125.                 memory = torch.transpose(memory, 1, 2).contiguous()
  126.                 mem_embedding = netT(memory)
  127.                 mem_embedding = torch.squeeze(mem_embedding).contiguous()
  128.                 hidden = text_encoder.init_hidden(batch_size)
  129.                 words_embs, sent_emb = text_encoder(captions, cap_lens, hidden, mem_embedding)
  130.                 words_embs, sent_emb = words_embs.detach(), sent_emb.detach()
  131.                 #  get mask
  132.                 mask = (captions == 0)
  133.                 num_words = words_embs.size(2)############################################################################
  134.                 if mask.size(1) > num_words:
  135.                     mask = mask[:, :num_words]
  136.                 truncated_normal_(noise, 0, 1)
  137.                 fake_imgs, _, _, _ = netG(noise, sent_emb, words_embs, mask)

  138.                 for j in range(batch_size):

  139.                     s_tmp = '%s/single/%s' % (save_dir, keys[j])
  140.                     folder = s_tmp[:s_tmp.rfind('/')]
  141.                     if not os.path.isdir(folder):
  142.                         print('Make a new folder: ', folder)
  143.                         mkdir_p(folder)
  144.                     k = -1
  145.                     # for k in range(len(fake_imgs)):
  146.                     im = fake_imgs[k][j].data.cpu().numpy()
  147.                     # [-1, 1] --> [0, 255]
  148.                     im = (im + 1.0) * 127.5
  149.                     im = im.astype(np.uint8)
  150.                     im = np.transpose(im, (1, 2, 0))
  151.                     im = Image.fromarray(im)
  152.                     fullpath = '%s_s%d.png' % (s_tmp, k)
  153.                     im.save(fullpath)
  154.             f_cap.close()
  155.             f_len.close()
  156.             f_memory.close()
  157.     else:

  158.         wordtoix = dataset.wordtoix
  159.         filepath = '%s/example_filenames.txt' % (cfg.DATA_DIR)
  160.         data_dic = {}
  161.         with open(filepath, "r") as f:
  162.             filenames = f.read().encode('utf8').decode('utf8').split('\n')########################################3333
  163.             for name in filenames:
  164.                 if len(name) == 0:
  165.                     continue
  166.                 filepath = '%s/%s.txt' % (cfg.DATA_DIR, name)
  167.                 with open(filepath, "r") as f:
  168.                     print('Load from:', name)
  169.                     sentences = f.read().decode('utf8').split('\n')
  170.                     # a list of indices for a sentence
  171.                     captions = []
  172.                     cap_lens = []
  173.                     for sent in sentences:
  174.                         if len(sent) == 0:
  175.                             continue
  176.                         sent = sent.replace("\ufffd\ufffd", " ")
  177.                         tokenizer = RegexpTokenizer(r'\w+')
  178.                         tokens = tokenizer.tokenize(sent.lower())
  179.                         if len(tokens) == 0:
  180.                             print('sent', sent)
  181.                             continue

  182.                         rev = []
  183.                         for t in tokens:
  184.                             t = t.encode('ascii', 'ignore').decode('ascii')
  185.                             if len(t) > 0 and t in wordtoix:
  186.                                 rev.append(wordtoix[t])
  187.                         captions.append(rev)
  188.                         cap_lens.append(len(rev))
  189.                 max_len = np.max(cap_lens)

  190.                 sorted_indices = np.argsort(cap_lens)[::-1]
  191.                 cap_lens = np.asarray(cap_lens)
  192.                 cap_lens = cap_lens[sorted_indices]
  193.                 cap_array = np.zeros((len(captions), max_len), dtype='int64')
  194.                 for i in range(len(captions)):
  195.                     idx = sorted_indices[i]
  196.                     cap = captions[idx]
  197.                     c_len = len(cap)
  198.                     cap_array[i, :c_len] = cap
  199.                 key = name[(name.rfind('/') + 1):]
  200.                 data_dic[key] = [cap_array, cap_lens, sorted_indices]

  201.         s_tmp = save_dir
  202.         for key in data_dic:
  203.             save_dir = '%s/%s' % (s_tmp, key)
  204.             mkdir_p(save_dir)
  205.             captions, cap_lens, sorted_indices = data_dic[key]
  206.             batch_size = captions.shape[0]
  207.             nz = cfg.GAN.Z_DIM
  208.             captions = Variable(torch.from_numpy(captions), volatile=True)
  209.             cap_lens = Variable(torch.from_numpy(cap_lens), volatile=True)
  210.             captions = captions.cuda()
  211.             cap_lens = cap_lens.cuda()
  212.             noise = Variable(torch.FloatTensor(batch_size, nz), volatile=True)
  213.             noise = noise.cuda()
  214.             memory_dir = '../memory/memoryft_9487.pkl'
  215.             vocab_trans_dir = '../memory/transvob.pkl'
  216.             f_memory = open(memory_dir, 'rb')
  217.             memory_feats = pickle.load(f_memory)
  218.             f_memory.close()
  219.             f_trans = open(vocab_trans_dir, 'rb')
  220.             vob_trans = pickle.load(f_trans)
  221.             f_trans.close()
  222.             memory_list = []
  223.             for i in range(captions.shape[0]):
  224.                 word_list = []
  225.                 for j in range(captions[i].shape[0]):
  226.                     cap_id = vob_trans[captions[i][j]]
  227.                     word_list.append(torch.from_numpy(memory_feats[str(cap_id)]).unsqueeze(dim=0))
  228.                 sentence = torch.cat(word_list, 0)
  229.                 memory_list.append(sentence.unsqueeze(dim=0))
  230.             memory = torch.cat(memory_list, 0)
  231.             memory = memory.cuda()
  232.             memory = torch.transpose(memory, 1, 2).contiguous()
  233.             mem_embs = netT(memory)
  234.             mem_embs = torch.squeeze(mem_embs).contiguous()
  235.             hidden = text_encoder.init_hidden(batch_size)
  236.             words_embs, sent_emb = text_encoder(captions, cap_lens, hidden, mem_embs)
  237.             words_embs, sent_emb = words_embs.detach(), sent_emb.detach()
  238.             mask = (captions == 0)
  239.             num_words = words_embs.size(2)
  240.             if mask.size(1) > num_words:
  241.                 mask = mask[:, :num_words]
  242.             truncated_normal_(noise, 0, 1)
  243.             fake_imgs, _, _, _ = netG(noise, sent_emb, words_embs, mask)
  244.             for j in range(batch_size):
  245.                 fake_img = fake_imgs[2][j]
  246.                 fake_im = Image.fromarray(np.transpose(((fake_img.detach().cpu().numpy() + 1.0) * 127.5).astype(np.uint8), (1,2,0)))
  247.                 fullpath = '%s/%d.png' % (save_dir,j)
  248.                 fake_im.save(fullpath)
复制代码


这是完整的代码 在其他服务器上是可以运行的但是colab会报错

完整的报错 现在那个数据被我移到另一个文件夹,在跑程序,原来的报错信息也没存下来,所以现在没有办法复制
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-11-8 17:43:20 | 显示全部楼层
  1. Traceback (most recent call last):
  2.   File "eval.py", line 107, in <module>
  3.     netG = netG.cuda()
  4. AttributeError: 'OrderedDict' object has no attribute 'cuda'
复制代码

这是完整的报错信息
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 04:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表