次のレイアウトに従う人工ニューラル ネットワーク (PyBrain 内) を作成したいと考えています。
ただし、これを達成するための適切な方法が見つかりません。ドキュメントに表示される唯一のオプションは、完全に接続されたレイヤーを作成する方法ですが、これは私が望んでいるものではありません。入力ノードの一部を最初の隠しレイヤーではなく、2 番目の隠しレイヤーに接続したいのです。
次のレイアウトに従う人工ニューラル ネットワーク (PyBrain 内) を作成したいと考えています。
ただし、これを達成するための適切な方法が見つかりません。ドキュメントに表示される唯一のオプションは、完全に接続されたレイヤーを作成する方法ですが、これは私が望んでいるものではありません。入力ノードの一部を最初の隠しレイヤーではなく、2 番目の隠しレイヤーに接続したいのです。
解決策は、選択した接続タイプを使用することですが、スライスパラメータ: inSliceFrom
、inSliceTo
、outSliceFrom
およびoutSliceTo
. ドキュメントでこれについて言及する必要があることに同意します。これまでのところ、Connection
クラスのコメントのみです。
あなたの場合のコード例は次のとおりです。
#create network and modules
net = FeedForwardNetwork()
inp = LinearLayer(9)
h1 = SigmoidLayer(2)
h2 = TanhLayer(2)
outp = LinearLayer(1)
# add modules
net.addOutputModule(outp)
net.addInputModule(inp)
net.addModule(h1)
net.addModule(h2)
# create connections
net.addConnection(FullConnection(inp, h1, inSliceTo=6))
net.addConnection(FullConnection(inp, h2, inSliceFrom=6))
net.addConnection(FullConnection(h1, h2))
net.addConnection(FullConnection(h2, outp))
# finish up
net.sortModules()
Schoul によって提案された方法に代わる方法は、複数の入力レイヤーを使用することです。
#create network
net = FeedForwardNetwork()
# create and add modules
input_1 = LinearLayer(6)
net.addInputModule(input_1)
input_2 = LinearLayer(3)
net.addInputModule(input_2)
h1 = SigmoidLayer(2)
net.addModule(h1)
h2 = SigmoidLayer(2)
net.addModule(h2)
outp = SigmoidLayer(1)
net.addOutputModule(outp)
# create connections
net.addConnection(FullConnection(input_1, h1))
net.addConnection(FullConnection(input_2, h2))
net.addConnection(FullConnection(h1, h2))
net.addConnection(FullConnection(h2, outp))
net.sortModules()