c++ - MNIST:获得的准确度比我在互联网上看到的结果要低
问题描述
我正在尝试训练一个完全连接的神经网络来使用 MNIST 数据集对手写数字进行分类。神经网络是我用 C++ 实现的。这是我的课程项目的一部分。但是,我发现培训有点奇怪。我不知道出了什么问题。
我的课程讲师要求我们使用 Sigmoid 作为激活函数,使用 MSE 作为损失函数,即使对于输出层也是如此。我有点怀疑这是否是正确的选择。但我还是按照他说的去做。
我的网络结构是:
28*28 (input layer) value: 0-1
|
|
500 (hidden layer) activation: sigmoid
|
|
10 (output layer) activation: sigmoid
|
|
loss: MSE
学习率为 0.4。批量大小为 100。损失迅速下降到 0.5,但不会再减少。测试准确率上升到60%,并且不会再增加。
我想知道我是否错误地实现了神经网络,或者我不应该使用 Sigmoid 和 MSE。谢谢!
解决方案
改变你的激活和损失函数。
Sigmoid 用于二进制分类的输出层,但 MNIST 是多类分类问题。并使用分类交叉熵。MSE(均方误差)用于回归。
推荐阅读
- api - 币安期货最后订单 API 端点
- visual-studio-code - 我如何在 Visual Studio 中运行 python 代码来创建 GCP bigquery 数据集
- swift - 限制列表中的 API 请求
- node.js - React App 无法启动并给出错误
- java - 如何使用 appium 从内部存储中获取文件列表
- java - Spring Boot App 无法连接到 PostgreSQL 容器
- r - 从变量中整理信息
- python - Python csv 列表
- spring-boot - 线程“OkHttp Dispatcher”中的异常 java.lang.NoSuchMethodError: com.google.gson.JsonParser.parseString(Ljava/lang/String;)
- javascript - 输入字段的 API 参考函数