今度はtorch(AI)を始めてみた |     ✤ We Love Softbrain ✤ 

    ✤ We Love Softbrain ✤ 

        日々の仕事や、プライベートな趣味まで掲載しています。

皆さん、こんにちはビックリマーク

シニアTですクローバー


新しいGPUを導入したので、流行りのAI(torch)をマスターすることにしました音譜

シニアT式のマスターの仕方は、たった一つひらめき電球
プログラムを手で打ち込んで、動かしてみるんです筋肉
動いたら、ちょっとずつ改造していきます音譜

改造するたびに、どこか引っ掛かりますから、それを解決していくと身に付ついていきますよねビックリマーク
ちょっとずつだし、消耗するけど・・・

今回は、
https://www.atmarkit.co.jp/ait/articles/2002/06/news025.htmlで、始めましたひらめき電球

で、最初の改造・・・

class NeuralNetwork(nn.Module):
    def __init__(self, nfs=[2,3,3,1]):
        super(NeuralNetwork, self).__init__()
        self.layers = [nn.Linear(nfs[i],nfs[i+1]) for i in range(len(nfs) - 1)]
        self.activations = [torch.nn.Tanh() for _ in range(len(nfs) - 1)]
    def forward(self, x):
        for layer, activation in zip(self.layers, self.activations):
            x = activation(layer(x))
        return x
    def parameters(self):
        for layer in self.layers:
            yield layer.weight
            yield layer.bias

ちょっと(13行)とはいえ、NeuralNetwork全面的に書き換えて、parameters()を上書きしましたビックリマーク

狙いは、
  nn = NewralNetwork(nfs=[2,3,3,1])
などと、コンストラクタに与えるパラメータによって、ニューロンや層の数を設定できるようにすることですひらめき電球

で、学習データに



を与えると、ネットワークの構成によって学習結果がどうなるかはてなマーク
初心者(私)は、わくわくしますねウインク


XY平面上(XtoYで2入力)の色(1出力)の、適当なサンプルで学習させた結果、XY平面全体は、どんな風に分類されるかの、実験ですひらめき電球

まずはお手本と、同じネットワークになる設定、
 nfs=[2,3,3,1]

2入力で、ニューロン3個のレイヤーが二つあって、そのあと色の値を出力する(1出力)っていう設定ですビックリマーク



あれはてなマークこんなふうに、たまに、失敗しますあせる
境界部分は、どんな風か気になりますよね。アナログで色付けしましたビックリマーク



色が綺麗になっただけで同じですね(苦笑)。
実は、たいていはうまくいって・・・



間のレイヤーが3ニューロンだから三辺形になるビックリマーク

たまに失敗して二辺形(笑)になるのでしょうニヤリ


だったら、nfs=[2,10,1]なら、ほぼ丸くなって、ほぼ必ず成功しそうな気がするひらめき電球



確かに・・・
で、これは、必ず失敗のはず

 nfs=[2, 2, 1]




ま、そりゃ、そうだひらめき電球

けど、面白いねクローバー