本文整理汇总了Python中model.cuda方法的典型用法代码示例。如果您正苦于以下问题:Python model.cuda方法的具体用法?Python model.cuda怎么用?Python model.cuda使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类model
的用法示例。
在下文中一共展示了model.cuda方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: get_loader
# 需要导入模块: import model [as 别名]
# 或者: from model import cuda [as 别名]
def get_loader(self):
paths = [os.path.join(self.cache_dir, phase + '.pkl') for phase in self.config.get('train', 'phase').split()]
dataset = utils.data.Dataset(
utils.data.load_pickles(paths),
transform=transform.augmentation.get_transform(self.config, self.config.get('transform', 'augmentation').split()),
one_hot=None if self.config.getboolean('train', 'cross_entropy') else len(self.category),
shuffle=self.config.getboolean('data', 'shuffle'),
dir=os.path.join(self.model_dir, 'exception'),
)
logging.info('num_examples=%d' % len(dataset))
try:
workers = self.config.getint('data', 'workers')
if torch.cuda.is_available():
workers = workers * torch.cuda.device_count()
except configparser.NoOptionError:
workers = multiprocessing.cpu_count()
collate_fn = utils.data.Collate(
transform.parse_transform(self.config, self.config.get('transform', 'resize_train')),
utils.train.load_sizes(self.config),
maintain=self.config.getint('data', 'maintain'),
transform_image=transform.get_transform(self.config, self.config.get('transform', 'image_train').split()),
transform_tensor=transform.get_transform(self.config, self.config.get('transform', 'tensor').split()),
dir=os.path.join(self.model_dir, 'exception'),
)
return torch.utils.data.DataLoader(dataset, batch_size=self.args.batch_size * torch.cuda.device_count() if torch.cuda.is_available() else self.args.batch_size, shuffle=True, num_workers=workers, collate_fn=collate_fn, pin_memory=torch.cuda.is_available())
示例2: batchify
# 需要导入模块: import model [as 别名]
# 或者: from model import cuda [as 别名]
def batchify(data, bsz):
# Work out how cleanly we can divide the dataset into bsz parts.
if isinstance(data, tuple):
nbatch = data[0].size(0) // bsz
# Trim off any extra elements that wouldn't cleanly fit (remainders).
tag_data = data[1].narrow(0, 0, nbatch * bsz)
data = data[0].narrow(0, 0, nbatch * bsz)
# Evenly divide the data across the bsz batches.
tag_data = tag_data.view(bsz, -1).t().contiguous()
else:
nbatch = data.size(0) // bsz
# Trim off any extra elements that wouldn't cleanly fit (remainders).
data = data.narrow(0, 0, nbatch * bsz)
# Evenly divide the data across the bsz batches.
data = data.view(bsz, -1).t().contiguous()
# Turning the data over to CUDA at this point may lead to more OOM errors
#if args.cuda:
# data = data.cuda()
if isinstance(data,tuple):
return data, tag_data
return data
示例3: evaluate
# 需要导入模块: import model [as 别名]
# 或者: from model import cuda [as 别名]
def evaluate(lm_data_source, ccg_data_source):
# Turn on evaluation mode which disables dropout.
model.eval()
total_loss = 0
ntokens = len(corpus.dictionary)
if (not args.single) and (torch.cuda.device_count() > 1):
#"module" is necessary when using DataParallel
hidden = model.module.init_hidden(eval_batch_size)
else:
hidden = model.init_hidden(eval_batch_size)
for i in range(0, lm_data_source.size(0) + ccg_data_source.size(0) - 1, args.bptt):
# TAG
if i > lm_data_source.size(0):
data, targets = get_batch(ccg_data_source, i - lm_data_source.size(0), evaluation=True)
# LM
else:
data, targets = get_batch(lm_data_source, i, evaluation=True)
output, hidden = model(data, hidden)
output_flat = output.view(-1, ntokens)
curr_loss = len(data) * criterion(output_flat, targets).data
total_loss += curr_loss
hidden = repackage_hidden(hidden)
if len(ccg_data_source) == 0:
return total_loss / len(lm_data_source)
return total_loss[0] / (len(lm_data_source)+len(ccg_data_source))
示例4: ensure_model
# 需要导入模块: import model [as 别名]
# 或者: from model import cuda [as 别名]
def ensure_model(model):
if torch.cuda.is_available():
model.cuda()
if torch.cuda.device_count() > 1:
logging.info('%d GPUs are used' % torch.cuda.device_count())
model = nn.DataParallel(model).cuda()
return model
示例5: eval
# 需要导入模块: import model [as 别名]
# 或者: from model import cuda [as 别名]
def eval(self, **kwargs):
logging.info('evaluating')
if torch.cuda.is_available():
self.inference.cpu()
try:
e = _eval.Eval(self.args, self.config)
cls_ap = e()
self.backup_best(cls_ap, e.path)
except:
traceback.print_exc()
if torch.cuda.is_available():
self.inference.cuda()
示例6: batchify
# 需要导入模块: import model [as 别名]
# 或者: from model import cuda [as 别名]
def batchify(data, bsz):
# Work out how cleanly we can divide the dataset into bsz parts.
nbatch = data.size(0) // bsz
# Trim off any extra elements that wouldn't cleanly fit (remainders).
data = data.narrow(0, 0, nbatch * bsz)
# Evenly divide the data across the bsz batches.
data = data.view(bsz, -1).t().contiguous()
if args.cuda:
data = data.cuda()
return data
示例7: evaluate
# 需要导入模块: import model [as 别名]
# 或者: from model import cuda [as 别名]
def evaluate(split):
# Turn on evaluation mode which disables dropout.
model.eval()
total_loss, nbatches = 0, 0
ntokens = len(corpus.dictionary.idx2word)
hidden = model.init_hidden(args.eval_batch_size)
for source, target in corpus.iter(split, args.eval_batch_size, args.bptt, use_cuda=args.cuda):
model.softmax.set_target(target.data.view(-1))
output, hidden = model(source, hidden)
total_loss += criterion(output, target.view(-1)).data.sum()
hidden = repackage_hidden(hidden)
nbatches += 1
return total_loss / nbatches
示例8: test_get_batch
# 需要导入模块: import model [as 别名]
# 或者: from model import cuda [as 别名]
def test_get_batch(source, evaluation=False):
if isinstance(source, tuple):
seq_len = len(source[0]) - 1
data = Variable(source[0][:seq_len], volatile=evaluation)
target = Variable(source[1][:seq_len], volatile=evaluation)
else:
seq_len = len(source) - 1
data = Variable(source[:seq_len], volatile=evaluation)
target = Variable(source[1:1+seq_len].view(-1))
# This is where data should be CUDA-fied to lessen OOM errors
if args.cuda:
return data.cuda(), target.cuda()
else:
return data, target
示例9: get_batch
# 需要导入模块: import model [as 别名]
# 或者: from model import cuda [as 别名]
def get_batch(source, i, evaluation=False):
if isinstance(source, tuple):
seq_len = min(args.bptt, len(source[0]) - 1 - i)
data = Variable(source[0][i:i+seq_len], volatile=evaluation)
target = Variable(source[1][i:i+seq_len].view(-1))
else:
seq_len = min(args.bptt, len(source) - 1 - i)
data = Variable(source[i:i+seq_len], volatile=evaluation)
target = Variable(source[i+1:i+1+seq_len].view(-1))
#This is where data should be CUDA-fied to lessen OOM errors
if args.cuda:
return data.cuda(), target.cuda()
else:
return data, target
示例10: train
# 需要导入模块: import model [as 别名]
# 或者: from model import cuda [as 别名]
def train():
global lr, best_val_loss
# Turn on training mode which enables dropout.
model.train()
total_loss, nbatches = 0, 0
start_time = time.time()
ntokens = len(corpus.dictionary.idx2word)
hidden = model.init_hidden(args.batch_size)
for b, batch in enumerate(corpus.iter('train', args.batch_size, args.bptt, use_cuda=args.cuda)):
model.train()
source, target = batch
# Starting each batch, we detach the hidden state from how it was previously produced.
# If we didn't, the model would try backpropagating all the way to start of the dataset.
hidden = repackage_hidden(hidden)
model.zero_grad()
model.softmax.set_target(target.data.view(-1))
output, hidden = model(source, hidden)
loss = criterion(output, target.view(-1))
loss.backward()
# `clip_grad_norm` helps prevent the exploding gradient problem in RNNs.
torch.nn.utils.clip_grad_norm(model.parameters(), args.clip)
for p in model.parameters():
if p.grad is not None:
p.data.add_(-lr, p.grad.data)
total_loss += loss.data.cpu()
if b % args.log_interval == 0 and b > 0:
cur_loss = total_loss[0] / args.log_interval
elapsed = time.time() - start_time
val_loss = evaluate('valid')
print('| epoch {:3d} | batch {:5d} | lr {:02.5f} | ms/batch {:5.2f} | '
'loss {:5.2f} | ppl {:8.2f} | valid loss {:5.2f} | valid ppl {:8.2f}'.format(
epoch, b, lr,
elapsed * 1000 / args.log_interval, cur_loss, math.exp(cur_loss),
val_loss, math.exp(val_loss)))
# Save the model if the validation loss is the best we've seen so far.
if not best_val_loss or val_loss < best_val_loss:
with open(args.save, 'wb') as f:
torch.save(model, f)
best_val_loss = val_loss
else:
# Anneal the learning rate if no improvement has been seen in the validation dataset.
lr *= args.ar
total_loss = 0
start_time = time.time()
# At any point you can hit Ctrl + C to break out of training early.
示例11: test_evaluate
# 需要导入模块: import model [as 别名]
# 或者: from model import cuda [as 别名]
def test_evaluate(test_lm_sentences, test_ccg_sentences, lm_data_source, ccg_data_source):
# Turn on evaluation mode which disables dropout.
model.eval()
total_loss = 0.
ntokens = len(corpus.dictionary)
if args.words:
print('word sentid sentpos wlen surp entropy')#,end='')
if args.guess:
for i in range(args.guessn):
print(' guess'+str(i))#,end='')
if args.guessscores:
print(' gscore'+str(i))#,end='')
sys.stdout.write('\n')
bar = Bar('Processing', max=len(lm_data_source)+len(ccg_data_source))
for i in range(len(lm_data_source)+len(ccg_data_source)):
if i >= len(lm_data_source):
sent_ids = ccg_data_source[i-len(lm_data_source)]
sent = test_ccg_sentences[i-len(lm_data_source)]
else:
sent_ids = lm_data_source[i]
sent = test_lm_sentences[i]
if args.cuda:
sent_ids = sent_ids.cuda()
if (not args.single) and (torch.cuda.device_count() > 1):
# "module" is necessary when using DataParallel
hidden = model.module.init_hidden(1) # number of parallel sentences being processed
else:
hidden = model.init_hidden(1) # number of parallel sentences being processed
data, targets = test_get_batch(sent_ids, evaluation=True)
data=data.unsqueeze(1) # only needed if there is just a single sentence being processed
output, hidden = model(data, hidden)
output_flat = output.view(-1, ntokens)
curr_loss = criterion(output_flat, targets).item()
#curr_loss = len(data) * criterion(output_flat, targets).data # needed if there is more than a single sentence being processed
total_loss += curr_loss
if args.words:
# output word-level complexity metrics
if i >= len(lm_data_source):
get_complexity_apply(output_flat,targets,i-len(lm_data_source),tags=True)
else:
get_complexity_apply(output_flat,targets,i)
else:
# output sentence-level loss
print(str(sent)+":"+str(curr_loss[0]))
hidden = repackage_hidden(hidden)
bar.next()
bar.finish()
return total_loss / (len(lm_data_source)+len(ccg_data_source))