任意の数の入力と出力を備えた人工ニューロンネットワーク(ANN)


10

問題にANNを使用したいのですが、問題は入力と出力のノード番号が固定されていないことです。

私は質問をする前にグーグル検索をしましたが、RNNが私の問題を解決するのに役立つことがわかりました。しかし、私が見つけたすべての例は、どういうわけか、入力ノードと出力ノードの数を定義しています。

それで、私は戦略、それをどのように現実のものにするか、または少なくともいくつかの例を探しています。KerasまたはPyTorchで望ましいです。

私の問題の詳細:

2つの入力リストがあります。最初のリストの長さは固定され、2に等しくなります。fe:

in_1 = [2,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]形式に再形成される可能性がある必要があることを意味します。

現在、2つの入力リストを1つに結合することを考えています。

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]

どんなアイデアでも大歓迎です!

回答:


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!それらを一度に1つずつニューラルネットワークに供給し、最後に特別な「終了」トークンで終了します(これには常に2番目の入力があります)。終了トークンが見つかるまで何も出力せず、結果のコンポーネントを一度に1つずつ出力して、特別な終了出力トークンで終了するように指示します。


わあ、ありがとう!それをよりよく理解するためのまともなチュートリアル/例を知っていますか?
Paddy

1
@Paddy いくつかのリンクについてはawesome-rnnを参照してください。たとえば、char-rnnはとても楽しいです。
アーサータッカ2017

2

最初のリストはほとんど不変であることを知っている(特定のジオメトリを説明するだけ)ために、個別の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)

最初のステップでは、構成を決定(つまり、dictを作成)し、それに応じて専用ネットワークをトレーニング/フィードします。


実際にはいいアイデアですが、シェイプの数は非常に多いです...とにかく、入力をありがとう!
Paddy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.