私は PyBrain の初心者 (そして ANN の初心者) であるため、PyBrain の使用に慣れるために、sin 関数のトレーニングを試みました。私の出力はほとんど意味がありません---各データポイントに対して、0、-0、または固定の実数の出力を取得します(以下の例では実数を取得します)。これは、私が正しくトレーニングしていないことを示しています。
SupervisedDataSet(1,1) を介して 1 つの入力と 1 つの出力を持つデータセットを作成し、BackPropTrainer() を使用してトレーニングすることでトレーニングを試みてきました。私は PyBrain のドキュメントを広範囲に読みましたが、かなりまばらで、例はあまり良くありません。私の入力は範囲 (0,1000) の整数であり、出力/ターゲットは単純にその整数の正弦に定数を掛けたものです (したがって、0 から 2pi の間で評価されます)。コードは以下のとおりです。
def add_samples():
ds = SupervisedDataSet(1,1)
for j in range(0,1000):
ds.addSample(j,math.sin((j*math.pi)/500))
print ds
return ds
def FeedForward():
n= FeedForwardNetwork()
#construct input, hiddent, and output Layers
inLayer=LinearLayer(1)
hiddenLayer = SigmoidLayer(3)
outLayer=LinearLayer(1)
# add layers to the network
n.addInputModule(inLayer)
n.addModule(hiddenLayer)
n.addOutputModule(outLayer)
# make the connections between the layers
in_to_hidden = FullConnection(inLayer, hiddenLayer)
hidden_to_out = FullConnection(hiddenLayer, outLayer)
# explicitly adding the connections to the network
n.addConnection(in_to_hidden)
n.addConnection(hidden_to_out)
# some internal organization
n.sortModules()
print n
return n
def backprop():
n=FeedForward()
ds=add_samples()
trainer = BackpropTrainer(n, ds)
trainer.trainOnDataset(ds,100)
trainer.testOnData(verbose=True)
def main():
backprop()
if __name__ == '__main__':
main()
私の出力は次のようになります。
error: 0.00084029
out: [0.016 ]
correct: [-0.019]
error: 0.00060250
out: [0.016 ]
correct: [-0.013]
error: 0.00040415
out: [0.016 ]
correct: [-0.006]
error: 0.00024526
1000 の出力すべてが 0.016 と評価されました。誰か提案がありますか、または良い例を教えてくれますか? しばらくぐるぐる回っています。些細なことを見逃しているか、ANNまたは機械学習全般の基本的な概念が欠けていると思います。さらに情報を提供すると役立つかどうかをお知らせください。ありがとう!