本文整理汇总了Python中chainer.training.StandardUpdater方法的典型用法代码示例。如果您正苦于以下问题:Python training.StandardUpdater方法的具体用法?Python training.StandardUpdater怎么用?Python training.StandardUpdater使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类chainer.training
的用法示例。
在下文中一共展示了training.StandardUpdater方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: setup_updater
# 需要导入模块: from chainer import training [as 别名]
# 或者: from chainer.training import StandardUpdater [as 别名]
def setup_updater(mode, gpus, train_iter, optimizer):
gpu0 = gpus[0]
if len(gpus) == 1:
# Single GPU or CPU
logger.info('Setup single updater (gpu: %d)', gpu0)
updater = training.StandardUpdater(train_iter, optimizer, device=gpu0,
converter=select_converter(mode))
else:
# Multiple GPUs
logger.info('Setup parallel updater (gpu: %s)', str(gpus))
devs = {'slave{}'.format(i): gpu for i, gpu in enumerate(gpus[1:])}
devs['main'] = gpu0
updater = training.updaters.MultiprocessParallelUpdater(
train_iter, optimizer, devices=devs,
converter=select_converter(mode))
return updater
示例2: train
# 需要导入模块: from chainer import training [as 别名]
# 或者: from chainer.training import StandardUpdater [as 别名]
def train(network, loss, X_tr, Y_tr, X_te, Y_te, n_epochs=30, gamma=1):
model= Objective(network, loss=loss, gamma=gamma)
#optimizer = optimizers.SGD()
optimizer = optimizers.Adam()
optimizer.setup(model)
train = tuple_dataset.TupleDataset(X_tr, Y_tr)
test = tuple_dataset.TupleDataset(X_te, Y_te)
train_iter = iterators.SerialIterator(train, batch_size=1, shuffle=True)
test_iter = iterators.SerialIterator(test, batch_size=1, repeat=False,
shuffle=False)
updater = training.StandardUpdater(train_iter, optimizer)
trainer = training.Trainer(updater, (n_epochs, 'epoch'))
trainer.run()
示例3: test_linear_network
# 需要导入模块: from chainer import training [as 别名]
# 或者: from chainer.training import StandardUpdater [as 别名]
def test_linear_network():
# To ensure repeatability of experiments
np.random.seed(1042)
# Load data set
dataset = get_dataset(True)
iterator = LtrIterator(dataset, repeat=True, shuffle=True)
eval_iterator = LtrIterator(dataset, repeat=False, shuffle=False)
# Create neural network with chainer and apply our loss function
predictor = links.Linear(None, 1)
loss = Ranker(predictor, listnet)
# Build optimizer, updater and trainer
optimizer = optimizers.Adam(alpha=0.2)
optimizer.setup(loss)
updater = training.StandardUpdater(iterator, optimizer)
trainer = training.Trainer(updater, (10, 'epoch'))
# Evaluate loss before training
before_loss = eval(loss, eval_iterator)
# Train neural network
trainer.run()
# Evaluate loss after training
after_loss = eval(loss, eval_iterator)
# Assert precomputed values
assert_almost_equal(before_loss, 0.26958397)
assert_almost_equal(after_loss, 0.2326711)
示例4: update_core
# 需要导入模块: from chainer import training [as 别名]
# 或者: from chainer.training import StandardUpdater [as 别名]
def update_core(self):
loss = 0
# When we pass one iterator and optimizer to StandardUpdater.__init__,
# they are automatically named 'main'.
train_iter = self.get_iterator('main')
optimizer = self.get_optimizer('main')
# Progress the dataset iterator for bprop_len words at each iteration.
for i in range(self.bprop_len):
# Get the next batch (a list of tuples of two word IDs)
batch = train_iter.__next__()
# Concatenate the word IDs to matrices and send them to the device
# self.converter does this job
# (it is chainer.dataset.concat_examples by default)
x, t = self.converter(batch, self.device)
# Compute the loss at this time step and accumulate it
# loss += optimizer.target(chainer.Variable(x), chainer.Variable(t))
loss += optimizer.target(x, t)
optimizer.target.cleargrads() # Clear the parameter gradients
loss.backward() # Backprop
loss.unchain_backward() # Truncate the graph
optimizer.update() # Update the parameters
# Routine to rewrite the result dictionary of LogReport to add perplexity
# values
示例5: _prepare_multinode_snapshot
# 需要导入模块: from chainer import training [as 别名]
# 或者: from chainer.training import StandardUpdater [as 别名]
def _prepare_multinode_snapshot(n, result):
n_units = 100
batchsize = 10
comm = create_communicator('naive')
model = L.Classifier(MLP(n_units, 10))
optimizer = chainermn.create_multi_node_optimizer(
chainer.optimizers.Adam(), comm)
optimizer.setup(model)
if comm.rank == 0:
train, _ = chainer.datasets.get_mnist()
else:
train, _ = None, None
train = chainermn.scatter_dataset(train, comm, shuffle=True)
train_iter = chainer.iterators.SerialIterator(train, batchsize)
updater = StandardUpdater(train_iter, optimizer)
trainer = Trainer(updater, out=result)
snapshot = extensions.snapshot(target=updater, autoload=True)
replica_sets = []
mn_snapshot = multi_node_snapshot(comm, snapshot, replica_sets)
mn_snapshot.initialize(trainer)
for _ in range(n):
updater.update()
return updater, mn_snapshot, trainer
示例6: setup_mnist_trainer
# 需要导入模块: from chainer import training [as 别名]
# 或者: from chainer.training import StandardUpdater [as 别名]
def setup_mnist_trainer(self, display_log=False, use_chx=False):
batchsize = 100
n_units = 100
comm = self.communicator
model = L.Classifier(MLP(n_units, 10))
model.to_device(get_device(None, use_chx))
optimizer = chainermn.create_multi_node_optimizer(
chainer.optimizers.Adam(), comm)
optimizer.setup(model)
if comm.rank == 0:
train, test = chainer.datasets.get_mnist()
else:
train, test = None, None
train = chainermn.scatter_dataset(train, comm, shuffle=True)
test = chainermn.scatter_dataset(test, comm, shuffle=True)
train_iter = chainer.iterators.SerialIterator(train, batchsize)
test_iter = chainer.iterators.SerialIterator(test, batchsize,
repeat=False,
shuffle=False)
updater = training.StandardUpdater(
train_iter,
optimizer
)
return updater, optimizer, train_iter, test_iter, model
示例7: update_core
# 需要导入模块: from chainer import training [as 别名]
# 或者: from chainer.training import StandardUpdater [as 别名]
def update_core(self):
"""Update model one step."""
# When we pass one iterator and optimizer to StandardUpdater.__init__,
# they are automatically named 'main'.
train_iter = self.get_iterator("main")
optimizer = self.get_optimizer("main")
# Get the next batch (a list of json files)
batch = train_iter.next()
if isinstance(batch, tuple):
x = tuple(arr.to(self.device) for arr in batch)
else:
x = batch
for key in x.keys():
x[key] = x[key].to(self.device)
# compute loss and gradient
if isinstance(x, tuple):
loss = self.model(*x).mean() / self.accum_grad
else:
loss = self.model(**x).mean() / self.accum_grad
loss.backward()
# update parameters
self.forward_count += 1
if self.forward_count != self.accum_grad:
return
self.forward_count = 0
# compute the gradient norm to check if it is normal or not
grad_norm = self.clip_grad_norm(self.model.parameters(), self.grad_clip)
logging.debug("grad norm={}".format(grad_norm))
if math.isnan(grad_norm):
logging.warning("grad norm is nan. Do not update model.")
else:
optimizer.step()
optimizer.zero_grad()
示例8: update_core
# 需要导入模块: from chainer import training [as 别名]
# 或者: from chainer.training import StandardUpdater [as 别名]
def update_core(self):
"""Update the model."""
# When we pass one iterator and optimizer to StandardUpdater.__init__,
# they are automatically named 'main'.
train_iter = self.get_iterator("main")
optimizer = self.get_optimizer("main")
# Progress the dataset iterator for sentences at each iteration.
self.model.zero_grad() # Clear the parameter gradients
accum = {"loss": 0.0, "nll": 0.0, "count": 0}
for _ in range(self.accum_grad):
batch = train_iter.__next__()
# Concatenate the token IDs to matrices and send them to the device
# self.converter does this job
# (it is chainer.dataset.concat_examples by default)
x, t = concat_examples(batch, device=self.device[0], padding=(0, -100))
if self.device[0] == -1:
loss, nll, count = self.model(x, t)
else:
# apex does not support torch.nn.DataParallel
loss, nll, count = data_parallel(self.model, (x, t), self.device)
# backward
loss = loss.mean() / self.accum_grad
if self.use_apex:
from apex import amp
with amp.scale_loss(loss, optimizer) as scaled_loss:
scaled_loss.backward()
else:
loss.backward() # Backprop
# accumulate stats
accum["loss"] += float(loss)
accum["nll"] += float(nll.sum())
accum["count"] += int(count.sum())
for k, v in accum.items():
reporter.report({k: v}, optimizer.target)
if self.gradclip is not None:
nn.utils.clip_grad_norm_(self.model.parameters(), self.gradclip)
optimizer.step() # Update the parameters
self.scheduler.step(n_iter=self.iteration)
示例9: _train_trainer
# 需要导入模块: from chainer import training [as 别名]
# 或者: from chainer.training import StandardUpdater [as 别名]
def _train_trainer(self, examples):
"""Training with chainer trainer module"""
train_iter = SerialIterator(examples, args.batch_size)
optimizer = optimizers.Adam(alpha=args.lr)
optimizer.setup(self.nnet)
def loss_func(boards, target_pis, target_vs):
out_pi, out_v = self.nnet(boards)
l_pi = self.loss_pi(target_pis, out_pi)
l_v = self.loss_v(target_vs, out_v)
total_loss = l_pi + l_v
chainer.reporter.report({
'loss': total_loss,
'loss_pi': l_pi,
'loss_v': l_v,
}, observer=self.nnet)
return total_loss
updater = training.StandardUpdater(
train_iter, optimizer, device=args.device, loss_func=loss_func, converter=converter)
# Set up the trainer.
trainer = training.Trainer(updater, (args.epochs, 'epoch'), out=args.out)
# trainer.extend(extensions.snapshot(), trigger=(args.epochs, 'epoch'))
trainer.extend(extensions.LogReport())
trainer.extend(extensions.PrintReport([
'epoch', 'main/loss', 'main/loss_pi', 'main/loss_v', 'elapsed_time']))
trainer.extend(extensions.ProgressBar(update_interval=10))
trainer.run()
示例10: train
# 需要导入模块: from chainer import training [as 别名]
# 或者: from chainer.training import StandardUpdater [as 别名]
def train():
parser = argparse.ArgumentParser()
parser.add_argument('--gpu', '-g', type=int, default=-1)
parser.add_argument('--model', '-m', type=str, default=None)
parser.add_argument('--opt', type=str, default=None)
parser.add_argument('--epoch', '-e', type=int, default=3)
parser.add_argument('--lr', '-l', type=float, default=0.001)
parser.add_argument('--inf', type=int, default=10)
parser.add_argument('--outf', type=int, default=10)
parser.add_argument('--batch', '-b', type=int, default=8)
args = parser.parse_args()
train = dataset.MovingMnistDataset(0, 7000, args.inf, args.outf)
train_iter = iterators.SerialIterator(train, batch_size=args.batch, shuffle=True)
test = dataset.MovingMnistDataset(7000, 10000, args.inf, args.outf)
test_iter = iterators.SerialIterator(test, batch_size=args.batch, repeat=False, shuffle=False)
model = network.MovingMnistNetwork(sz=[128,64,64], n=2)
if args.model != None:
print( "loading model from " + args.model )
serializers.load_npz(args.model, model)
if args.gpu >= 0:
cuda.get_device_from_id(0).use()
model.to_gpu()
opt = optimizers.Adam(alpha=args.lr)
opt.setup(model)
if args.opt != None:
print( "loading opt from " + args.opt )
serializers.load_npz(args.opt, opt)
updater = training.StandardUpdater(train_iter, opt, device=args.gpu)
trainer = training.Trainer(updater, (args.epoch, 'epoch'), out='results')
trainer.extend(extensions.Evaluator(test_iter, model, device=args.gpu))
trainer.extend(extensions.LogReport(trigger=(10, 'iteration')))
trainer.extend(extensions.PrintReport(['epoch', 'main/loss', 'validation/main/loss']))
trainer.extend(extensions.ProgressBar(update_interval=1))
trainer.run()
modelname = "./results/model"
print( "saving model to " + modelname )
serializers.save_npz(modelname, model)
optname = "./results/opt"
print( "saving opt to " + optname )
serializers.save_npz(optname, opt)