项目介绍:skorch
skorch 是一个兼容 scikit-learn 的神经网络库,专门用于对 PyTorch 的封装,以便更轻松地操作深度学习模型。该项目旨在为用户提供一种将 PyTorch 模型无缝集成到 scikit-learn 管道中的途径,使机器学习工作流更加简单和高效。
核心功能
skorch 兼具 PyTorch 的灵活性和 scikit-learn 的简便性,主要提供以下核心功能:
- scikit-learn 兼容性:可以轻松地将 PyTorch 模型集成到 scikit-learn 的工作流中,包括管道 (Pipeline) 和参数搜索 (Grid Search)。
- 便捷的高阶功能:提供开箱即用的学习率调度器、早停机制、检查点保存、参数冻结等多种高级回调 (callback),以简化模型训练过程。
- 支持多种评分函数:使用 scikit-learn 的评分函数或自定义评分函数进行模型评估,使得模型的训练和评估更为灵活。
安装方法
skorch 的安装多种多样,用户可以根据自己的开发环境选择不同的方式:
- 通过 Conda:使用
conda install -c conda-forge skorch
命令安装 skorch,推荐在虚拟环境中进行。 - 通过 pip:使用
python -m pip install -U skorch
命令进行安装。 - 从源码构建:对于希望体验最新功能或者参与开发的用户,可以克隆源码库,并通过 Conda 或 pip 进行源码安装。
使用实例
以下是 skorch 的基本使用示例,展示如何创建一个简单的神经网络分类器:
import numpy as np
from sklearn.datasets import make_classification
from torch import nn
from skorch import NeuralNetClassifier
# 制作数据集
X, y = make_classification(1000, 20, n_informative=10, random_state=0)
X = X.astype(np.float32)
y = y.astype(np.int64)
# 定义神经网络结构
class MyModule(nn.Module):
def __init__(self, num_units=10, nonlin=nn.ReLU()):
super().__init__()
self.dense0 = nn.Linear(20, num_units)
self.nonlin = nonlin
self.dropout = nn.Dropout(0.5)
self.dense1 = nn.Linear(num_units, num_units)
self.output = nn.Linear(num_units, 2)
self.softmax = nn.Softmax(dim=-1)
def forward(self, X, **kwargs):
X = self.nonlin(self.dense0(X))
X = self.dropout(X)
X = self.nonlin(self.dense1(X))
X = self.softmax(self.output(X))
return X
# 创建和训练分类器
net = NeuralNetClassifier(
MyModule,
max_epochs=10,
lr=0.1,
iterator_train__shuffle=True,
)
net.fit(X, y)
y_proba = net.predict_proba(X)
高级特性与集成
skorch 还提供了多个便于提升工作流和性能的高级特性,例如与 Hugging Face 的集成、与 GPyTorch 的集成以支持高斯过程等。此外,还支持在命令行中自动推断参数和提供进度条显示。
交流与支持
用户可以通过 GitHub 讨论区提交问题、请求新功能或参与讨论。skorch 也在 PyTorch 的 Slack 服务器上设有专门的频道,以便用户进行实时交流和提问。
总之,skorch 通过将 PyTorch 强大的深度学习能力与 scikit-learn 简单易用的接口相结合,为数据科学家及机器学习工程师们提供了一种高效、灵活的解决方案。无论是初学者还是有经验的开发者,都能从中找到适合自己的功能去优化工作流和模型表现。