- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在学习教程“Deep MNIST for Experts”,https://www.tensorflow.org/versions/r0.11/tutorials/mnist/pros/index.html#deep-mnist-for-experts
使用卷积神经网络,我得到了 93.49% 的准确率。这实际上很低,我正在努力改进它,但我有疑问。根据教程,
for i in range(20000):
batch = mnist.train.next_batch(50)
if i%100 == 0:
train_accuracy = accuracy.eval(feed_dict={x:batch[0], y_: batch[1], keep_prob: 1.0})
print("step %d, training accuracy %g"%(i, train_accuracy))
train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})
每 100 次迭代后记录一次训练的准确度,并看到准确度不断振荡,先增加后减少。
step 100, training accuracy 0.1
step 200, training accuracy 0.13
step 300, training accuracy 0.12
step 400, training accuracy 0.08
step 500, training accuracy 0.12
step 600, training accuracy 0.05
step 700, training accuracy 0.09
step 800, training accuracy 0.1
step 900, training accuracy 0.12
step 1000, training accuracy 0.09
step 1100, training accuracy 0.11
step 1200, training accuracy 0.09
step 1300, training accuracy 0.11
step 1400, training accuracy 0.06
step 1500, training accuracy 0.09
step 1600, training accuracy 0.14
step 1700, training accuracy 0.07
step 1800, training accuracy 0.08
......
step 19800, training accuracy 0.14
step 19900, training accuracy 0.07
有什么理由吗?还是正常的?那为什么会这样呢?另外,我可以改变什么样的变量来提高最终的准确性?我已经尝试过更改学习率变量。
最佳答案
精度波动通常是由过高的 learning_rate
引起的。我的第一个建议确实是降低learning_rate
,您是否在对数刻度上测试了多个学习率,例如0.1,0.05,0.02,0.01,0.005,0.002,...?
使用大幅较小的学习率应该可以消除振荡精度。还要检查 this answer关于 Kaggle 和 linked document以获得更好的理解。
编辑:
根据评论中的评论:此准确度是按批处理测量的。由于您每次都在比较不同批处理的精度(简单批处理与较难批处理),因此精度不会单调增加是正常的。您可以进一步减少振荡:
通过增加批量大小,波动应该会减少:不同示例难度的影响将被平均掉。
您还可以计算一组固定示例的训练准确度:
使用验证集
平均一个时期内所有批处理的批处理准确度
在每个训练步骤后实际计算训练集中所有示例的准确度。如果你有一个很大的训练集,这个偏离类(class)对训练时间有很大的影响。
关于python - 使用 Tensor Flow 对 MNIST 手写数字进行 CNN 训练的振荡精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40156629/
我的机器学习算法已经学习了 MNIST 数据库中的 70000 张图像。我想在 MNIST 数据集中未包含的图像上对其进行测试。但是,我的预测函数无法读取我的测试图像的数组表示。 如何在外部图像上测试
我正在尝试创建我自己的 MNIST 数据版本。我已将训练和测试数据转换为以下文件; test-images-idx3-ubyte.gz test-labels-idx1-ubyte.gz train-
我通过 pip 在我的 Windows 设备上安装了 python-mnist 包,正如 Github 文档中所述,方法是在我的 Anaconda 终端中输入以下命令: pip install pyt
描述 Fashion Mnist 是一个类似于 Mnist 的图像数据集. 涵盖 10 种类别的 7 万 (6 万训练集 + 1 万测试集) 个不同商品的图片. Tensor
该模型现在只能使用 tf. 识别单个字母。我怎样才能让它识别连续的字母单词? 最佳答案 手写数字识别。 ... MNIST 是一个广泛用于手写数字分类任务的数据集。它由 70,000 个标记为 28x
我已经从 MNIST 训练集中解压了第一张图像,并且可以访问 (28,28) 矩阵。 [[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0
这是我学习的一部分。我知道标准化确实有助于提高准确性,因此将 mnist 值除以 255。这会将所有像素除以 255,因此 28*28 的所有像素的值将在 0.0 到 1.0 范围内. 现在我厌倦了将
我已成功将 MNIST 数据下载到扩展名为 .npy 的文件中。当我打印第一张图像的几列时。我得到以下结果。这里每个数字代表什么? a= np.load("training_set.npy") pri
我用tensorflow写了一个程序来处理Kaggle的数字识别问题。程序可以正常运行,但训练准确率总是很低,大约10%,如下: step 0, training accuracy 0.11 step
在 cnn_mnist.py例如,脚本首先加载训练和测试数据,如您从 120 行到 124 行中看到的那样。当我打印 print(train_data.shape) 时,我得到 (55000, 784
我研究神经网络有一段时间了,用python和numpy做了一个实现。我用 XOR 做了一个非常简单的例子,它运行良好。所以我想我更进一步尝试 MNIST 数据库。 这是我的问题。我正在使用具有 784
我目前正在研究手写数字识别问题。 首先,我针对 MNIST 数据集测试了示例手写数字。 我的准确率为 53%,我需要 90% 以上的准确率。 以下是我迄今为止为提高准确性所做的尝试。 创建了我自己的数
我正在尝试使用我自己的数字图像数据集测试 mnist。 我为此写了一个 python 脚本,但它给出了一个错误。错误在代码的第 16 行。实际上我无法发送图像进行测试。给我一些建议。提前致谢。 imp
我知道这可能是一个愚蠢的问题,但我真的不明白为什么。下面是我尝试从训练数据中打印单个图像和具有相同索引的标签的代码 import matplotlib.pyplot as plt from tenso
我尝试使用以下数据集在 python 中制作一个能够识别手写数字的脚本:http://deeplearning.net/data/mnist/mnist.pkl.gz . 关于这个问题和我试图实现的算
我正在尝试解决 Android 设备上的 MNIST 分类问题。我已经有一个经过训练的模型,现在我希望能够识别照片上的单个数字。 拍完照片后,我会进行一些预处理,然后再将图像传递给模型。这是原始图像的
MNIST 数据集介绍 MNIST 包含 0~9 的手写数字, 共有 60000 个训练集和 10000 个测试集. 数据的格式为单通道 28*28 的灰度图. LeNet 模型
我想导入 mnist digits 数字以在一个图中显示,并编写这样的代码, import keras from keras.datasets import mnist import matplotl
我目前正在研究数字手写识别问题。我发现很多state-of-art算法对mnist dateset采用了一些预处理方法,比如deskewing和jittering(我不知道'jittering'是什么
我到处找,但找不到我想要的。基本上,MNIST 数据集具有像素值在范围 [0, 255] 内的图像。 .人们说,一般来说,最好做到以下几点: 将数据缩放到 [0,1]范围。 将数据标准化为具有零均值和
我是一名优秀的程序员,十分优秀!