python-ignite在pytorch中的使用

from ignite.engine import Events, create_supervised_trainer, create_supervised_evaluator

model = Net()
train_loader, val_loader = get_data_loaders(train_batch_size, val_batch_size)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.8)
loss = torch.nn.NLLLoss()

trainer = create_supervised_trainer(model, optimizer, loss)
evaluator = create_supervised_evaluator(model,
metrics={
‘accuracy’: Accuracy(),
‘nll’: Loss(loss)
})

@trainer.on(Events.ITERATION_COMPLETED)
def log_training_loss(trainer):
print(“Epoch[{}] Loss: {:.2f}”.format(trainer.state.epoch, trainer.state.output))

@trainer.on(Events.EPOCH_COMPLETED)
def log_training_results(trainer):
evaluator.run(train_loader)
metrics = evaluator.state.metrics
print(“Training Results - Epoch: {} Avg accuracy: {:.2f} Avg loss: {:.2f}”
.format(trainer.state.epoch, metrics[‘accuracy’], metrics[‘nll’]))

@trainer.on(Events.EPOCH_COMPLETED)
def log_validation_results(trainer):
evaluator.run(val_loader)
metrics = evaluator.state.metrics
print(“Validation Results - Epoch: {} Avg accuracy: {:.2f} Avg loss: {:.2f}”
.format(trainer.state.epoch, metrics[‘accuracy’], metrics[‘nll’]))

trainer.run(train_loader, max_epochs=100)

下面进行分解。

model = Net()
train_loader, val_loader = get_data_loaders(train_batch_size, val_batch_size)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.8)
loss = torch.nn.NLLLoss()

这里定义了网络模型,数据加载器,模型参数优化器,损失函数的定义。

trainer = create_supervised_trainer(model, optimizer, loss)
evaluator = create_supervised_evaluator(model,
metrics={
‘accuracy’: Accuracy(),
‘nll’: Loss(loss)
})

这里使用create_supervised_trainer()定义了一个Engine类的对象,名字叫 trainer 。

使用create_supervised_evaluator()定义了一个Engine类的对象,名字叫 evaluator 。

其实不使用create_supervised_trainer和create_supervised_evaluator(),也可以直接定义一个Engine类,Engine类参数为训练过程的处理函数,或者验证过程的处理函数。

典型的训练过程:

def _update(engine, batch):
model.train()
optimizer.zero_grad()
x, y = _prepare_batch(batch, device=device)
y_pred = model(x)
loss = loss_fn(y_pred, y)
loss.backward()
optimizer.step()
return loss.item()

典型的验证过程:

def _inference(engine, batch):
model.eval()
with torch.no_grad():
x, y = _prepare_batch(batch, device=device)
y_pred = model(x)
return y_pred, y


@trainer.on(Events.ITERATION_COMPLETED)

def log_training_loss(engine):
print(“Epoch[{}] Loss: {:.2f}”.format(engine.state.epoch, engine.state.output))

这里就是注册一个函数,在训练结束时执行,函数的功能是进行写日志。


trainer.run(train_loader, max_epochs=100)

最后,我们进行训练的过程。训练时过程,是按照时间轴的步骤进行。训练结束的输出,通过engine.state.output来获取。

写到这,我想起了tensorflow的计算图和会话模型。发现这个框架和tensorflow的计算图/会话模型 有点神似呢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python-Ignite是一个基于PyTorch的高级库,旨在帮助训练神经网络。它提供了许多实用程序和类,可以简化训练和评估过程。以下是一个简单的例子,演示如何使用Python-Ignite训练一个简单的神经网络: ```python import torch from ignite.engine import Events, create_supervised_trainer, create_supervised_evaluator from ignite.metrics import Accuracy, Loss # 定义模型 model = torch.nn.Sequential( torch.nn.Linear(2, 10), torch.nn.ReLU(), torch.nn.Linear(10, 1), torch.nn.Sigmoid() ) # 定义损失函数和优化器 loss_fn = torch.nn.BCELoss() optimizer = torch.optim.SGD(model.parameters(), lr=0.01) # 定义训练器和评估器 trainer = create_supervised_trainer(model, optimizer, loss_fn) evaluator = create_supervised_evaluator(model, metrics={'accuracy': Accuracy(), 'loss': Loss(loss_fn)}) # 训练和评估 @trainer.on(Events.EPOCH_COMPLETED) def log_training_results(trainer): evaluator.run(train_loader) metrics = evaluator.state.metrics print("Training Results - Epoch: {} Avg accuracy: {:.2f} Avg loss: {:.2f}" .format(trainer.state.epoch, metrics['accuracy'], metrics['loss'])) @trainer.on(Events.EPOCH_COMPLETED) def log_validation_results(trainer): evaluator.run(val_loader) metrics = evaluator.state.metrics print("Validation Results - Epoch: {} Avg accuracy: {:.2f} Avg loss: {:.2f}" .format(trainer.state.epoch, metrics['accuracy'], metrics['loss'])) trainer.run(train_loader, max_epochs=10) ``` 在这个例子,我们首先定义了一个简单的神经网络模型,然后定义了损失函数和优化器。接下来,我们使用`create_supervised_trainer`和`create_supervised_evaluator`函数创建了训练器和评估器。最后,我们定义了两个回调函数,用于在每个epoch结束时记录训练和验证结果。我们使用`trainer.run`函数开始训练过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值