25

我有一个可能微不足道的问题,但在我看过的任何地方都没有描述。我正在研究神经网络,我所看到的任何地方都有一些理论和一些简单的例子,其中一些 0 和 1 作为输入。我想知道:我是否必须只将一个值作为一个神经元的输入值,或者它可以是一个向量,比如说,3 个值(例如 RGB 颜色)?

4

6 回答 6

12

上述答案在技术上是正确的,但不能解释简单的事实:从来没有需要将数字向量提供给单个神经元的情况。

从实际的角度来看,这是因为(如先前的解决方案之一所示)您可以只为向量中的每个数字拥有一个神经元,然后将所有这些都作为单个神经元的输入。这应该会让你在训练后得到你想要的行为,因为第二层神经元可以有效地利用整个向量。

从数学的角度来看,编码理论有一个基本定理,即任何数字向量都可以表示为单个数字。因此,如果您真的不想要额外的神经元层,您可以简单地将 RGB 值编码为单个数字并将其输入到神经元。虽然,这种编码功能可能会使大多数学习问题变得更加困难,所以我怀疑这种解决方案在大多数情况下是否值得。

总结一下:人工神经网络在没有给输入单元一个向量的情况下使用,但不会因此而失去计算能力。

于 2011-06-30T22:33:48.500 回答
8

在处理多维数据时,我相信据说两层神经网络可以提供更好的结果。

在你的情况下:

R[0..1] => (N1)----\
                    \
G[0..1] => (N2)-----(N4) => Result[0..1]
                    /
B[0..1] => (N3)----/

如您所见,N4 神经元可以处理 3 个条目。

[0..1] 间隔是一种约定,但在 imo 中是一个很好的间隔。这样,您可以轻松编写一组可以采用任意数量条目的通用神经元类(我有模板 C++ 类,其中条目数作为模板参数个人)。因此,您只需对神经元的逻辑进行一次编码,然后就可以玩弄网络结构和/或神经元内的功能组合。

于 2009-03-16T23:49:22.523 回答
4

通常,单个神经元的输入是介于 0 和 1 之间的值。该约定不仅是为了便于实现,而且因为将输入值归一化到相同的范围可确保每个输入具有相似的权重。(如果您有一些具有 8 位颜色且像素值介于 0 和 7 之间的图像,以及一些具有 16 位颜色且像素值介于 0 和 255 之间的图像,那么您可能不希望仅仅因为数值为更高。同样,您可能希望您的图像具有相同的尺寸。)

就使用像素值作为输入而言,尝试收集比其像素更高级别的图像表示是很常见的(更多信息)。例如,给定一个 5 x 5(归一化)灰度图像:

[1 1 1 1 1]
[0 0 1 0 0] 
[0 0 1 0 0] 
[0 0 1 0 0] 
[0 0 1 0 0]

我们可以使用以下特征矩阵来帮助发现图像的水平、垂直和对角线特征。有关更多信息,请参阅python haar 人脸检测

[1 1]  [0 0]  [1 0]  [0 1]  [1 0], [0 1]
[0 0], [1 1], [1 0], [0 1], [0 1], [1 0]

要为此图像构建输入向量v,请获取第一个 2x2 特征矩阵并通过逐元素乘法将其“应用”到图像中的第一个位置。申请,

[1 1] (the first feature matrix) to [1 1] (the first position in the image)
[0 0]                               [0 0] 

将导致 2,因为 1*1 + 1*1 + 0*0 + 0*0 = 2。将 2 附加到此图像的输入向量的后面。然后将此特征矩阵移动到下一个位置,向右移动一个,并再次应用它,将结果添加到输入向量中。对特征矩阵的每个位置和每个特征矩阵重复执行此操作。这将为单个图像构建您的输入向量。确保为每个图像以相同的顺序构建向量。

在这种情况下,图像是黑白的,但是使用 RGB 值,您可以扩展算法以执行相同的计算,但将 3 个值添加到每个像素的输入向量 - 每种颜色一个。这应该为每个图像提供一个输入向量,并为每个神经元提供一个输入。然后在通过网络运行之前需要对向量进行归一化。

于 2014-12-24T18:34:40.710 回答
2

通常,单个神经元将多个实数作为其输入并输出一个实数,该实数通常通过将 sigmoid 函数应用于实数之和(缩放,然后加上或减去一个恒定偏移量)来计算。

如果您想输入两个 RGB 向量(2 x 3 实数),您需要决定如何组合这些值。如果将所有元素加在一起并应用 sigmoid 函数,则相当于得到六个实数“平”。另一方面,如果您处理 R 元素,然后是 G 元素和 B 元素,所有这些都单独处理(例如,将这些对相加或相减),您实际上拥有三个独立的神经元。

所以简而言之,不,单个神经元不接受向量值。

于 2009-03-17T00:08:25.567 回答
2

使用归一化为可见光谱的光波长作为输入。

网上有一些近似公式。搜索 RGB 到波长的转换或使用 HSL 颜色模型并提取色相分量,也可能使用饱和度和亮度。出色地...

于 2013-06-02T16:58:07.897 回答
1

它可以是任何你想要的,只要你相应地编写你的内部函数。

您提到的示例使用 [0;1] 作为其域,但您可以使用 R、R² 或任何您想要的,只要您在神经元中使用的函数是在此域上定义的。

在您的情况下,您可以在 R3 上定义您的函数以允许处理 RGB 值

一个简单的例子:使用 (x1, y1, z1),(x2,y2,z2)->(ax1+x2,by1+y2,cz1+z2) 作为将两种颜色转换为一种颜色的函数,ab 和 c 是你的学习系数,您将在学习阶段确定。

维基百科上提供了非常详细的信息(包括您问题的答案)。

于 2009-03-16T23:31:10.070 回答