Skorch 是一个基于 PyTorch 的高级神经网络库,它提供了许多便捷的功能,包括与 Scikit-Learn 兼容的接口。要绘制训练和验证准确性,你可以使用 Skorch 提供的回调函数和 Matplotlib 库来实现。
训练准确性:在训练过程中,模型对训练数据的预测准确性。 验证准确性:在训练过程中,模型对验证数据的预测准确性。
以下是一个使用 Skorch 和 Matplotlib 绘制训练和验证准确性的示例代码:
import matplotlib.pyplot as plt
from skorch import NeuralNetClassifier
from skorch.callbacks import EpochScoring
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from torch import nn
# 加载数据集
X, y = load_iris(return_X_y=True)
X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.2, random_state=42)
# 数据标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_valid = scaler.transform(X_valid)
# 定义神经网络模型
class IrisClassifier(nn.Module):
def __init__(self):
super(IrisClassifier, self).__init__()
self.fc1 = nn.Linear(4, 64)
self.fc2 = nn.Linear(64, 3)
def forward(self, x):
x = nn.functional.relu(self.fc1(x))
x = self.fc2(x)
return x
# 创建神经网络分类器
net = NeuralNetClassifier(
IrisClassifier,
max_epochs=20,
lr=0.01,
device='cpu',
callbacks=[
('valid_acc', EpochScoring(scoring='accuracy', lower_is_better=False, name='valid_acc')),
]
)
# 训练模型
net.fit(X_train, y_train)
# 获取训练和验证准确性
train_losses = net.history[:, 'train_loss']
valid_losses = net.history[:, 'valid_loss']
train_accs = net.history[:, 'train_acc']
valid_accs = net.history[:, 'valid_acc']
# 绘制图表
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.plot(train_losses, label='Training Loss')
plt.plot(valid_losses, label='Validation Loss')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.legend()
plt.subplot(1, 2, 2)
plt.plot(train_accs, label='Training Accuracy')
plt.plot(valid_accs, label='Validation Accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.legend()
plt.show()
问题:训练准确性很高,但验证准确性很低。 原因:可能是模型过拟合了训练数据。 解决方法:
通过上述方法和代码示例,你可以有效地监控和分析模型的训练过程,从而优化模型性能。
领取专属 10元无门槛券
手把手带您无忧上云