gpt4 book ai didi

computer-vision - 为什么我的CNN不能学习?

转载 作者:行者123 更新时间:2023-12-03 23:36:25 24 4
gpt4 key购买 nike

我是深度学习的新手。我刚刚用 Tensorflow 实现了一个 CNN,并在 CIFAR-10(一个对象识别基准,其中图像位于 10 个不同的类 )上进行了尝试。

在训练过程中,一开始训练损失下降的非常快(从100000到3),但之后一直停留在附近。 2.30 (大约是 log(1/10))。由于我使用交叉熵作为损失函数,2.30 的损失意味着我的模型的准确度约为 10% ---- 与随机猜测完全相同(我已经检查了模型的实际输出,实际上几乎都在 10% 左右)每个类(class))。

我试图增加模型的大小,以尝试是否因为我的模型不够“强大”而导致过拟合。但事实证明,无论我如何增加或减少模型大小,训练损失总是会在 2.30 左右停止减少。

我非常有信心我正确地实现了它,因为我的模型适用于更简单的任务,例如 MNIST(手写数字识别)。所以我真的想知道可能是什么问题。非常感谢。
enter image description here

conv1:带有relu的卷积层

pooling1:最大池化层

fc1:带relu的全连接层

输出:带有 softmax 的全连接层

代码:

nn = NeuralNetwork(optimizer=Adam(0.001), log_dir='logs')
nn.add(Input('input', [32, 32, 3], ))
nn.add(Convolution2D(name='conv1', filter_height=3, filter_width=3,
n_output_channels=256, activation_fn='relu'))
nn.add(Pooling2D('pooling1', mode='max', pool_shape=(3, 3), padding='SAME'))
nn.add(Convolution2D(name='conv2', filter_height=3, filter_width=3,
n_output_channels=128, activation_fn='relu'))
nn.add(Pooling2D('pooling2', mode='max', pool_shape=(3, 3), padding='SAME'))
nn.add(FullyConnected('fc1', 384, activation_fn='relu',
weight_init=truncated_normal(), bias_init=constant(0.1)))
nn.add(FullyConnected('fc2', 192, activation_fn='relu',
weight_init=truncated_normal(), bias_init=constant(0.1)))
nn.add(Output(loss_fn='sparse_softmax_cross_entropy', output_fn='softmax',
name='output', target_shape=[], target_dtype=tf.int64,
output_shape=10))
nn.build()

编辑:

正如我所提到的。我试图通过添加更多层来增加我的模型的复杂性,并且几乎在教程中尝试了一个,除了我没有标准层(conv1、pooling1、conv2、pooling2、fc1、fc2、softmax)和预处理如白化等。为简单起见,我认为这可能不会像 86% 到 10% 那样严重影响我的表现。

我认为可能有帮助的另一个线索是我找到了层 fc1 的输出。非常稀疏(几乎 99% 的元素为零)。由于我使用ReLU作为激活函数,这意味着fc1中的单元大多是死的。我有什么可以用它做的吗?

最佳答案

您可能只是严重低估了在此任务上获得合理结果所需的架构。您描述的模型 (input->conv1->pooling1->fc1->output) 可能适用于 MNIST,但这并不意味着它可以在涉及真彩色图像的图像分类任务上取得比随机更好的结果。

现实情况是,您需要为人们提供实际代码以提供更具体的建议,但根据您所描述的模型,我至少建议您查看一些可以解决此问题的其他模型。例如,Tensorflow 带有 example CNN在 CIFAR-10 上可以达到 ~86% 的准确率,但这个模型更复杂。即使有额外的卷积层和全连接层、归一化和输入预处理(白化、数据增强等),以及调整过的超参数,仍然需要在强大的 GPU 上进行几个小时的训练才能获得良好的结果。

无论如何,长话短说,我认为您应该查看示例模型以了解所需的架构类型。很容易低估在随机彩色图像中识别对象与黑白数字集相比要复杂得多。

关于computer-vision - 为什么我的CNN不能学习?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37229086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com