使用多层感知器(MLP)对图像进行分类及其性能

我刚开始接触机器学习/深度学习领域!

如果我理解正确,当我使用图像作为输入时,

输入层的neurons数量 = 像素数量(即分辨率)

通过反向传播更新权重和偏置,以尽可能降低错误率。

问题1.

那么,即使是单个图像数据也会通过反向传播算法调整权重和偏置的值,那么添加更多相似图像到这个MLP中如何提高性能呢?(我可能忽略了什么重要的东西..然而对我来说,似乎它只会针对给定的单个图像进行优化,如果我输入下一个(相似图像),它只会针对下一个图像进行优化)

问题2.

如果我想训练我的MLP识别某些类型的图像(比如衣服/动物),每个标签(即衣服,动物)的一个好的训练集数量是多少?我知道更多的训练集会产生更好的结果,但是多少数量对于足够好的性能来说是理想的?

问题3.(继续)

从一个有点不同的角度提问,有一个谷歌云视觉API,它会将图像作为输入,并产生标签/概率作为输出。所以这个API会给我一个输出,比如100个标签和每个标签的概率。

(例如,当我输入一个在线游戏截图时,它会产生如下的输出,)example

这种类型的数据可以作为MLP的输入来分类特定类型的图像吗?(假设我知道谷歌API产生的所有可能的标签类型,并将它们全部用作输入神经元)

像素值代表一个图像。但同样,我认为这种API输出结果可以从不同的角度代表一个图像。

如果是这样,性能差异会是什么?例如)在分类10种不同类型的图像时,(基于像素训练的模型)与(基于输出标签训练的模型)


回答:

我可以帮你从直观的角度理解这些问题。

首先,可能值得看看卷积神经网络和深度学习,看看如何处理图像作为输入以减少权重数量。不会是每个像素一个权重。

另外,你所说的“性能”具体指什么?这不是一个定义明确的问题。如果你使用一张图片,比如一只猫,你所说的性能是指你能在其他图片中识别出猫,还是说你能多接近你的猫?

想象你有一张包含3个权重、1个输入和1个输出的表格,并训练你的网络使错误率低于0.01,期望输出为0.5

W1    |  W2    | W3   | Output0.1     0.2      0.05   0.5006

如果你重新训练网络,你可能会得到不同的

W1    |  W2    | W3   | Output0.3     0.2      0.08   0.49983

由于权重差异很大,你可以想象有几种解决方案。

然后,如果你添加另一个输入,你可以想象那些对第一个解决方案有效的权重中的一些也会对第二个解决方案有效。

然后你再添加一个输入。然后,包含2个输入的解决方案子集将适用于3个输入。以此类推。

当你有足够多的不相关或噪声输入时,你将找不到满足你的错误标准的权重子集。你需要增加权重(更多的自由度)或增加错误目标,或两者兼而有之。

现在,你在训练网络时有一个学习率。假设你在进行在线训练(对于每个输入你都会更新权重),而不是批量训练(你为输入的批次(子集)找到错误向量,并根据该批次更新你的权重,一次更新一次)。

现在,假设你的学习率是0.01,权重是0.1。从直觉上看:

如果对于第一个输入,第一个权重的导数是5,那么你的权重将有新的值0.1 – 0.01*5 = 0.05

如果你输入下一个输入,假设导数是-5。这意味着第二个输入与第一个变化“意见不一致”,并试图回到0.01

如果第二个输入的导数是5,这意味着第二个权重与第一个“意见一致”。

如果你有20个输入,一些会将值向上拉,一些会将值向下推。你不断循环训练,然后值将接近大多数输入都同意的值,从而最小化该权重引起的错误。

对于问题2:

我的数学直觉告诉我,你绝对需要至少2倍的权重数量来使训练有意义,但你应该至少使其达到权重数量的10倍,才能对你的网络得出最低限度的结论,除非你不是在尝试猜测新事物(例如,对于异或门,你可能可以用远少于权重的输入,但这是一个有点长的讨论)

注意:

对于一张图像,你可以旋转它,拉伸它,与其他图像混合…来创建更多的图像并增加你的输入集。

如果你有一个简单的输入如异或门,你可以创建如(0.3, 0.7)(0.3, 0.6)(0.2, 0.8)…这样的输入来扩展你的训练集。

对于问题3:

这相当于将谷歌的网络与你创建的网络串联起来,但分别训练每个部分。

基本上:你有图片 –> 10个标签输入到你的网络 –> 你的分类

我看到的问题是,你可能不知道谷歌分类的所有可能输出。但假设它们是一致的,

你的标签是否与10个标签中的一个相同?如果是,使用给定的标签。如果是不同类型的标签,你可以使用该API来简化你的网络。有什么后果或性能如何?

这超出了我的理解范围。在神经网络中,虽然它们有很好的数学理论告诉我们它们能做什么,但许多提出的问题,如你所问的,需要特殊的数学分析(或许获得博士学位,获得与那类问题相关的某些见解),或者,像大多数人那样,展示实证结果。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注