具有任意数量输入和输出的人工神经网络 (ANN)

数据挖掘 Python 神经网络 喀拉斯 rnn 火炬
2021-10-13 03:16:46

我想使用人工神经网络来解决我的问题,但问题是我的输入和输出节点号不固定。

在问我的问题之前我做了一些谷歌搜索,发现 RNN 可以帮助我解决我的问题。但是,我发现的所有示例都以某种方式具有定义数量的输入和输出节点。

所以,我正在寻找一种策略,如何使它成为现实,或者至少是一些例子,在 Keras 或 PyTorch 中更可取。

有关我的问题的更多详细信息:

我有两个输入列表,其中第一个的长度是固定的并且等于两个,例如:

in_1 = [2,2] 

但是第二个列表的长度是灵活的,长度可以从三到inf,例如:

in_2 = [1,1,2,2]

或者

in_2 = [1,1,1,2,2,2,3,3,3]

此外,输入列表相互依赖。第一个列表显示输出列表的维度。因此,如果 in_1 = [2,2],则意味着输出必须有可能被重新整形为 [2,2] 形式。

目前,我正在考虑将两个输入列表合二为一:

in = in_1 + in_2 = [2, 2, 1, 1, 2, 2]

此外,输出与in_2列表的长度相同,例如:

如果输入列表是:

in_1 = [2, 2]
in_2 = [1, 1, 2, 2]

输出应该是:

out = [1, 2, 1, 2]

欢迎任何想法!

3个回答

答案可能取决于输入向量长度的重要性或它是如何产生的。

然而,最简单的解决方案通常是知道最大尺寸的输入并将其用作向量的数量。如果给定的输入长度较短,您可以使用零或适当的符号进行填充。所以不是有一个向量[1,2,3][1,2,2,3]你可以有向量[1,2,3,0][1,2,2,3].

这同样适用于输出。如果预期的输出是[1,2,1][1,3,4,1]您可以将第一个输出视为[1,2,1,0]

这不只是一个黑客行为吗?

通常,神经网络会进行函数逼近。理想情况下,它将向量(矩阵)表示为输入,将向量(矩阵)表示为输出。这就是为什么总是希望输入向量的大小是固定的。

我认为您可能误解了 RNN 的固定输入数量。这是每个时间步的输入数您的所有示例每个时间步都有固定数量的输入:1!您一次将它们提供给您的神经网络,并以特殊的“结束”标记结束(您总是可以为此输入第二个输入)。教它在看到结束标记之前不给出输出,然后一次输出一个结果的组件,以特殊的结束输出标记结束。

知道第一个列表几乎是不变的(仅描述某个几何形状),您还可以尝试为每个不同的in_1配置创建许多不同的专用 NN,并仅使用in_2来馈送网络。

所以in_1可以驱动不同的网络。即

in_1=[1,1]? --> NN #1 (n1) --> (o1)
in_1=[2,1]? --> NN #2 (n1,n2) --> (o1,o2)
in_1=[2,2]? --> NN #3 (n1,n2,n3,n4) -> (o1,o2,o3,o4)

在第一步中,您确定配置(即创建一个字典),然后相应地训练/提供专门的网络。