tensorboard可视化训练之train_loss和eval_loss放在同一曲线图中

本文介绍了如何在TensorFlow中使用TensorBoard将训练loss和验证loss绘制在同一曲线图上,以更好地分析模型的训练状态,包括过拟合和欠拟合的情况。
摘要由CSDN通过智能技术生成

在进行模型训练时,需要同时将训练loss曲线和测试loss曲线显示在一个曲线图中,便于观察网络训练情况(是否过拟合、欠拟合)。

方法:
train_writer = tf.summary.FileWriter(FLAGS.log_dir+'train', sess.graph)
eval_writer = tf.summary.FileWriter(FLAGS.log_dir+'eval'
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
在 `learning_curve` 函数,`train_loss` 和 `score` 参数都需要传入一个函数对象,分别用于计算训练损失和评估模型性能。 对于 `train_loss` 参数,你可以传入一个函数来计算每一轮训练后的损失,该函数应该接受一个训练集的迭代器和模型对象,然后返回当前训练轮次的平均损失。 对于 `score` 参数,通常情况下,你可以传入一个函数来评估模型的性能,该函数应该接受一个测试集的迭代器和模型对象,然后返回一个评估指标,例如准确率、F1 值等等。 具体的实现,可以参考以下示例代码: ```python import torch from sklearn.metrics import accuracy_score def train_loss(data_loader, model): model.train() loss_fn = torch.nn.CrossEntropyLoss() total_loss = 0.0 n = 0 for batch in data_loader: inputs, targets = batch outputs = model(inputs) loss = loss_fn(outputs, targets) total_loss += loss.item() * len(inputs) n += len(inputs) return total_loss / n def test_score(data_loader, model): model.eval() y_true, y_pred = [], [] with torch.no_grad(): for batch in data_loader: inputs, targets = batch outputs = model(inputs) _, preds = torch.max(outputs, dim=1) y_true.extend(targets.tolist()) y_pred.extend(preds.tolist()) return accuracy_score(y_true, y_pred) # 使用示例 from torch.utils.data import DataLoader, TensorDataset import numpy as np X_train = np.random.random(size=(1000, 10)) y_train = np.random.randint(0, 2, size=(1000,)) train_dataset = TensorDataset(torch.tensor(X_train), torch.tensor(y_train)) train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True) X_test = np.random.random(size=(200, 10)) y_test = np.random.randint(0, 2, size=(200,)) test_dataset = TensorDataset(torch.tensor(X_test), torch.tensor(y_test)) test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False) from skorch import NeuralNetClassifier from skorch.callbacks import EarlyStopping net = NeuralNetClassifier( module=torch.nn.Linear(10, 2), criterion=torch.nn.CrossEntropyLoss, optimizer=torch.optim.SGD, max_epochs=100, callbacks=[EarlyStopping(patience=5)], ) from skorch.utils import to_device from functools import partial to_device(net, 'cuda') partial_train_loss = partial(train_loss, model=net.module_) partial_test_score = partial(test_score, model=net.module_) from skorch.utils import to_numpy train_loss_values, test_score_values = learning_curve( net, train_loader, train_sizes=np.linspace(0.1, 1.0, 5), scoring=partial_test_score, scoring_train=partial_train_loss, device='cuda', verbose=1, n_jobs=1 ) print('Train loss:', train_loss_values) print('Test score:', test_score_values) ``` 在这个例子,我们定义了两个函数 `train_loss` 和 `test_score`。其,`train_loss` 用于计算每一轮训练后的平均损失,`test_score` 用于评估模型在测试集上的准确率。我们通过 `partial` 函数将这两个函数转化为只需要传入数据集和模型对象的函数对象,并将它们作为 `scoring_train` 和 `scoring` 参数传给 `learning_curve` 函数。在 `learning_curve` 函数,我们使用 `train_sizes` 参数来控制不同大小的训练集上的训练和评估,并使用 `n_jobs` 参数来并行计算。 最终,`learning_curve` 函数将返回训练集大小和对应的训练损失以及测试集大小和对应的评估指标,你可以将它们用于可视化学习曲线。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值