首页 > 解决方案 > 在处理 MNIST 的数字识别集时,我应该如何调整我的神经网络的隐藏层?

问题描述

我刚刚开始学习 ML 和 NN。现在,我正在使用 Jupyter Notebooks 和 Scikit,我想创建一个用于手写数字识别的神经网络。到目前为止,这是我笔记本中的内容:

import pandas as pd
import numpy as np

filepath_train = "practice/mnist_train.csv"
filepath_test= "practice/mnist_test.csv"
train_set = pd.read_csv(filepath_train )  #size is 60 000
test_set =  pd.read_csv(filepath_test )   #size is 10 000

x_train = train_set.drop("label", axis=1)
y_train = train_set["label"]

x_test = test_set.drop("label", axis=1)
y_test = test_set["label"]

from sklearn.neural_network import MLPClassifier
mlp = MLPClassifier(hidden_layer_sizes=(150,100), activation='logistic', alpha=0.1,
                    solver='sgd', tol=1e-4, random_state=1,
                    learning_rate_init=.1, verbose=True)
clf.fit(x_train,y_train)

我不得不承认,隐藏层/神经元的数量和我通过反复试验随机选择的激活函数。我尝试了更多,我尝试了更少,这取决于我在其他笔记本中看到的内容。无论哪种方式,无论我做什么,损失值一直停留在 0.7 - 0.8 左右

损失值

标签: scikit-learnneural-networkjupyter-notebook

解决方案


这些层给了我 90% 以上的准确率:

CNN_model = Sequential()
CNN_model.add(Conv2D(filters = 32, kernel_size = (5, 5), strides=(1, 1), activation='relu', input_shape=(28,28,1)))
CNN_model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
CNN_model.add(Conv2D(filters = 64, kernel_size = (5, 5), activation='relu'))
CNN_model.add(MaxPooling2D(pool_size=(2, 2)))
CNN_model.add(Flatten())
CNN_model.add(Dense(units = 1000, activation='relu'))
CNN_model.add(Dense(units = y_train.shape[1], activation='softmax')) 

推荐阅读