改进卷积神经网络的指南?

机器算法验证 卷积神经网络 超参数
2022-03-21 06:12:18

我正在尝试使用卷积神经网络(用keras实现)来解决 MNIST 分类问题的修改版本(我正在尝试这里描述的背景变化)。我从这个例子开始,对参数进行了一些调整以获得更好的准确性,但我似乎在我的验证集上陷入了大约 90% 的准确性。

我读过那些设法在这些数据集上获得接近人类准确性的论文,但我似乎无法改进我的网络以达到 95% 以上(我希望这是可能的)。因为到目前为止我只是在猜测网络的参数,而且我似乎没有在网上找到任何东西,所以我想知道是否有任何指南可以为卷积神经网络找到好的架构和好的参数。

除了尝试之外,有人会知道如何解决为 CNN 寻找好的参数(包括架构)的问题吗?

3个回答

除了尝试之外,有人会知道如何解决为 CNN 寻找好的参数(包括架构)的问题吗?

不。因此,它们通过“研究生血统”进行了优化:)

mnist 的标准架构是 lenet-5,以及密切相关的变体,例如 Karpathy 的 convnetjs实现,它使用以下层:

type:'input', out_sx:24, out_sy:24, out_depth:1
type:'conv', sx:5, filters:8, stride:1, pad:2, activation:'relu'
type:'pool', sx:2, stride:2
type:'conv', sx:5, filters:16, stride:1, pad:2, activation:'relu'
type:'pool', sx:3, stride:3
type:'softmax', num_classes:10

(我认为它通过从原始 28x28 图像中切割随机 24x24 补丁来增强数据,这是在这个(微小的)数据集上获得更高准确度的关键部分)。

有元学习技术,这是一个开放的研究领域。例如,Barret Zoph 和 Quoc Le 于 2016 年撰写的“使用强化学习进行神经架构搜索” ,使用强化学习来尝试不同的架构,找出效果良好的架构。它以自动化的方式执行此操作,无需人工干预。当然,这需要大量的 GPU 能力......

您可能首先使用 PCA 对数据进行去相关,然后将对象钳制到您的输入节点(即,将 PCA 从 PCA 输入到 CNN)。您选择了任何功能,还是使用了所有功能?(不知道功能是否被预先选择,用户是否应该使用所有东西?)。

我建议你尝试另一个数据集。MNIST 数据已在测试数据集上“过度调整”!!

您可以尝试对此数据进行“人工准确性”测试,但您可能无法获得超过 95% 的准确度。BTW,我试过了,有很多数字不是很容易辨认。这是一个例子,它可以是 3 或 5。

在此处输入图像描述

总而言之,今天的神经网络工具非常好,只需要很少的改动就可以获得非常好的结果,尤其是在经典数据集上。我对您的建议不会是在 MINIST 数据上推动模型的限制,而是尝试更多其他数据集。