Beispiel #1
0
def main():
    n_in_units = 2
    n_out_units = 1
    n_hidden1_units = 2
    n_hidden2_units = 2

    n_epochs = 500

    # 分類器の構築。buildNetwork()を使うと、入力層はLinearLayerになる。
    net = buildNetwork(
        n_in_units, n_hidden1_units, n_hidden2_units, n_out_units,
        hiddenclass=TanhLayer, outclass=SigmoidLayer,
        bias=True
    )
    net.randomize()

    print(">>> print net")
    print(net)

    # 入出力データ。
    ds = SupervisedDataSet(n_in_units, n_out_units)
    for _ in range(100):
        ds.appendLinked([0, 0], [0])
        ds.appendLinked([0, 1], [1])
        ds.appendLinked([1, 0], [1])
        ds.appendLinked([1, 1], [0])

    # 学習曲線のインタラクティブ描画準備。
    pl.figure()
    pl.ion()
    pl.hold(True)
    pl.show()

    # N_EPOCHSタイムステップ分の勾配降下。学習曲線も描画しつつ。
    trainer = BackpropTrainer(net, ds)
    for i in range(n_epochs):
        train_err = trainer.train()
        pl.plot(i, train_err, 'o')
        # pl.draw()  # 描画自体の負荷がかなり重いので、コメントアウトすると速くなる。
        print("Iteration %04d : train_err=%f" % (i, train_err))

    # テストセットで学習結果を確認。
    print([0, 0], net.activate([0, 0]))
    print([0, 1], net.activate([0, 1]))
    print([1, 0], net.activate([1, 0]))
    print([1, 1], net.activate([1, 1]))

    # 学習曲線を出したままプログラムを止める。
    pl.ioff()
    pl.show()
def main():
    n_epochs = 50

    # 試したいニューラルネットをコメントイン。
    # net = net1()
    # net = net2()
    # net = net3()
    net = net4()
    print(">>> print net")
    print(net)

    # 入出力データ。
    ds = SupervisedDataSet(N_IN_UNITS, N_OUT_UNITS)
    for _ in range(100):
        ds.appendLinked([0, 0], [0])
        ds.appendLinked([0, 1], [1])
        ds.appendLinked([1, 0], [1])
        ds.appendLinked([1, 1], [0])

    # 学習曲線のインタラクティブ描画準備。
    pl.figure()
    pl.ion()
    pl.hold(True)
    pl.show()

    # N_EPOCHSタイムステップ分の勾配降下。学習曲線も描画しつつ。
    trainer = BackpropTrainer(net, ds)
    with Benchmarker() as bench:
        @bench("net\n")
        def _(_):
            for i in range(n_epochs):
                train_err = trainer.train()
                pl.plot(i, train_err, 'o')
                pl.draw()
                print("Iteration %04d : train_err=%f" % (i, train_err))

    # テストセットで学習結果を確認。
    print([0, 0], net.activate([0, 0]))
    print([0, 1], net.activate([0, 1]))
    print([1, 0], net.activate([1, 0]))
    print([1, 1], net.activate([1, 1]))

    # 学習曲線を出したままプログラムを止める。
    pl.ioff()
    pl.show()