Введение
В этом руководстве показано, как создать классификатор многослойного персептрона (MLPClassifier) с использованием библиотеки Scikit-learn для классификации рукописных цифр из набора данных MNIST. Мы также визуализируем веса первого слоя многослойного персептрона, чтобы понять, как он обучается.
Советы по виртуальной машине
После запуска виртуальной машины (VM) нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Проверка операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если у вас возникнут проблемы во время обучения, не стесняйтесь обращаться к Labby. После занятия дайте обратную связь, и мы оперативно решим проблему для вас.
Импорт библиотек
Начнем с импорта необходимых библиотек для этого проекта.
import warnings
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
from sklearn.exceptions import ConvergenceWarning
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
Загрузка данных
Далее мы загрузим набор данных MNIST с помощью функции fetch_openml из библиотеки Scikit-learn.
X, y = fetch_openml(
"mnist_784", version=1, return_X_y=True, as_frame=False, parser="pandas"
)
Предварительная обработка данных
Мы нормализуем данные, разделив каждое значение пикселя на 255.0, которое является максимальным значением пикселя.
X = X / 255.0
Разделение данных
Мы разделим набор данных на обучающую и тестовую выборки с помощью функции train_test_split.
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0, test_size=0.7)
Обучение MLPClassifier
Мы создадим классификатор MLPClassifier (Многослойный персептрон) с одним скрытым слоем, содержащим 40 нейронов. Из-за ограничений ресурсов мы обучим MLP только на 8 итерациях. Также мы обработаем предупреждение ConvergenceWarning, которое будет выдано, так как модель не сойдется за ограниченное количество итераций.
mlp = MLPClassifier(
hidden_layer_sizes=(40,),
max_iter=8,
alpha=1e-4,
solver="sgd",
verbose=10,
random_state=1,
learning_rate_init=0.2,
)
with warnings.catch_warnings():
warnings.filterwarnings("ignore", category=ConvergenceWarning, module="sklearn")
mlp.fit(X_train, y_train)
Оценка модели
Мы оценим классификатор MLPClassifier, вычислив его точность на обучающей и тестовой выборках.
print("Training set score: %f" % mlp.score(X_train, y_train))
print("Test set score: %f" % mlp.score(X_test, y_test))
Визуализация весов
Наконец, мы визуализируем веса первого слоя многослойного персептрона (MLP). Мы создадим сетку из 4x4 подграфиков и отобразим каждый вес в виде изображения в оттенках серого размером 28x28 пикселей.
fig, axes = plt.subplots(4, 4)
vmin, vmax = mlp.coefs_[0].min(), mlp.coefs_[0].max()
for coef, ax in zip(mlp.coefs_[0].T, axes.ravel()):
ax.matshow(coef.reshape(28, 28), cmap=plt.cm.gray, vmin=0.5 * vmin, vmax=0.5 * vmax)
ax.set_xticks(())
ax.set_yticks(())
plt.show()
Резюме
В этом руководстве мы научились создавать классификатор MLPClassifier (Многослойный персептрон) с использованием библиотеки Scikit-learn для классификации рукописных цифр из набора данных MNIST. Мы также визуализировали веса первого слоя многослойного персептрона, чтобы понять, как он обучается.