scikit-learn - 在处理 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 左右
解决方案
这些层给了我 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'))
推荐阅读
- react-native - React-Native-Material-Dropdown 未在前端显示数据
- json - 使用 HTML 元素(输入、收音机等)递归呈现 JSON 树
- java - 如何让 Jackson mixin 处理包含的类型?
- python - Pandas 中的 For Loop 仅输出最后一次迭代
- regex - 仅匹配下面提到的作为 table_name 的单词
- angular - 角度递归 ng-template 仅在 UI 中显示被按下的项目的子项
- android - MainActivity 未读取子文件夹 Android Java
- python - 如何使用 sql server 或 pandas 函数创建更新列值的查询
- python - 如何将 Slack 消息导出到 Python
- c++ - 在容量范围内调整矢量大小时的性能影响