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


10

我想使用ANN解决我的问题,但是问题是我的输入和输出节点号不固定。

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

因此,我正在寻找一种策略,如何使其成为现实,或者至少是一些示例,在Keras或PyTorch中更可取。

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

我有两个输入列表,其中第一个的长度是固定的,等于2,fe:

in_1 = [2,2] 

但是第二个列表的长度是灵活的,长度可以从3到inf,fe:

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列表fi的长度相同:

如果输入列表是:

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

输出应为:

out = [1, 2, 1, 2]

任何想法都欢迎!

Answers:


6

答案可能取决于输入向量长度的重要性或其来源。

但是,最简单的解决方案通常是知道最大尺寸的输入并将其用作向量的数量。如果给定输入的长度较短,则可以使用零或适当的符号进行填充。因此,除了具有向量[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]

这不只是黑客吗?

通常,神经网络确实具有近似功能。理想情况下,它将向量(矩阵)表示为输入,并将向量(矩阵)表示为输出。这就是为什么总希望固定输入向量的大小的原因。


好的,很明显,我可以对输入进行填充。但是,如何定义输出节点的大小?
Paddy

3

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


哇谢谢!您知道任何体面的教程/示例可以更好地理解它吗?
Paddy

1
@Paddy参见awesome-rnn的一些链接,例如char-rnn很好玩。
亚瑟塔卡

2

明知第一清单几乎不变的(只是描述了一定的几何形状),你也可以尝试创造了许多不同的,专门为NN每个不同IN_1配置和只使用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)

在第一步中,确定配置(即创建字典),然后相应地训练/馈送专用网络。


实际上,这是个好主意,但是形状的数量却非常多...无论如何,谢谢您的投入!
Paddy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.