神经网络 - 输入值

时间:2009-03-16 23:29:35

标签: neural-network

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

6 个答案:

答案 0 :(得分:10)

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

从实际角度来看,这是因为(正如早期解决方案之一所示)你可以为一个向量中的每个数字设置一个神经元,然后将所有这些神经元作为单个神经元的输入。这可以在训练后获得您想要的行为,因为第二层神经元可以有效地利用整个矢量。

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

总结:使用人工神经网络而不向输入单元提供矢量,但由于此而失去计算能力。

答案 1 :(得分:6)

在处理多维数据时,我相信一个双层神经网络可以说是更好的结果。

在你的情况下:

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

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

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

答案 2 :(得分:3)

通常,单个神经元的输入是介于0和1之间的值。该惯例不仅仅是为了便于实现,而是因为将输入值标准化为相同的范围可确保每个输入都具有相似的权重。 (如果你有一些像素值在0到7之间的8位颜色的图像和一些像素值在0到255之间的16位颜色的图像你可能不想仅仅因为数字而喜欢24位彩色图像值更高。同样,您可能希望图像具有相同的尺寸。)

就使用像素值作为输入而言,尝试收集图像的高级表示比其像素(more info)更常见。例如,给定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 face detection

[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个值 - 每种颜色一个。这应该为每个图像提供一个输入向量,并为每个神经元提供单个输入。然后,在通过网络之前,需要对矢量进行标准化。

答案 3 :(得分:2)

通常,单个神经元将多个实数作为输入并输出实数,通常计算为将sigmoid函数应用于实数之和(按比例缩放,然后加上或减去常数偏移)。 / p>

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

简而言之,不,单个神经元不会接受矢量值。

答案 4 :(得分:2)

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

网上有一些近似的方程式。 搜索RGB到波长转换 要么 使用HSL颜色模型并提取Hue组件,也可能使用饱和度和亮度。嗯......

答案 5 :(得分:1)

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

你提到的例子使用[0; 1]作为他们的域,但你可以使用R,R²或任何你想要的东西,只要你在神经元中使用的函数是在这个域上定义的。

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

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

非常详细的信息(包括您的问题的答案)可用on Wikipedia