2

私は 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または機械学習全般の基本的な概念が欠けていると思います。さらに情報を提供すると役立つかどうかをお知らせください。ありがとう!

4

0 に答える 0