Golangのニューラルネットワークの概要

ハブラハブの読者の皆さん、こんにちは! この記事では、既製のライブラリを使用したGolangの単純なニューラルネットワークの例を示します。



はじめに



Golangプログラミング言語を学び始めて、私はこの言語が機械学習で何ができるのだろうと思いました。 次に、この言語のNSのコード例を探し始めました。 残念ながら、賢明なものは見つかりませんでした。 そして、 この記事のGOの下でNAを書き直すことにしました。



ニューラルネットワーク



ニューラルネットワークのタスクは、3つのパラメーターに基づいてキャラクターに何をするかを決定することです。





結果に応じて、次のいずれかの決定を行うことができます。





例:

健康 武器 解決策
50 1 1 攻撃する
90 1 2 攻撃する
80 0 1 攻撃する
30 1 1 こっそり
60 1 2 こっそり
40 0 1 こっそり
90 1 7 逃げる
60 1 4 逃げる
10 0 1 逃げる
60 1 0 何もしない
100 0 0 何もしない


準備する



GoNNライブラリを使用します。



インストール:



go get github.com/fxsjy/gonn/gonn
      
      





さあ始めましょう!



開始するには、インポートを設定しましょう:



 import ( "fmt" "github.com/fxsjy/gonn/gonn" )
      
      





それでは、ニューラルネットワークの作成を始めましょう。



 func CreateNN() { //    3   (   ), // 16    // 4   (   ) nn := gonn.DefaultNetwork(3, 16, 4, false) //    : // 1  -   (0.1 - 1.0) // 2  -   (0 - , 1 - ) // 3  -   input := [][]float64 { []float64{0.5, 1, 1}, []float64{0.9, 1, 2}, []float64{0.8, 0, 1}, []float64{0.3, 1, 1}, []float64{0.6, 1, 2}, []float64{0.4, 0, 1}, []float64{0.9, 1, 7}, []float64{0.6, 1, 4}, []float64{0.1, 0, 1}, []float64{0.6, 1, 0}, []float64{1, 0, 0} } //   "" -  ,    target := [][]float64 { []float64{1, 0, 0, 0}, []float64{1, 0, 0, 0}, []float64{1, 0, 0, 0}, []float64{0, 1, 0, 0}, []float64{0, 1, 0, 0}, []float64{0, 1, 0, 0}, []float64{0, 0, 1, 0}, []float64{0, 0, 1, 0}, []float64{0, 0, 1, 0}, []float64{0, 0, 0, 1}, []float64{0, 0, 0, 1} } //    . //   - 100000 nn.Train(input, target, 100000) //     . gonn.DumpNN("gonn", nn) }
      
      





次に、最大の重みを持つニューロンの応答を選択する関数を作成する必要があります。



 func GetResult(output []float64) string { max := -99999 pos := -1 //       . for i, value := range output { if (value > max) { max = value pos = i } } // ,    ,  . switch pos { case 0: return "" case 1: return "" case 2: return "" case 3: return "  " } return "" }
      
      





そして、メイン関数を書きます。



 func main() { CreateNN() //    . nn := gonn.LoadNN("gonn") //    : // hp -  (0.1 - 1.0) // weapon -   (0 - , 1 - ) // enemyCount -   var hp float64 = 0.7 var weapon float64 = 1.0 var enemyCount float64 = 1.0 //     ( ) out := nn.Forward([]float64{ hp, weapon, enemyCount }) //    . fmt.Println(GetResult(out)) }
      
      





この場合、答えは「攻撃」です。



おわりに



ご覧のとおり、Golangでニューラルネットワークを操作するプロセスは、他のプログラミング言語と同じです。 このネットワークを試して、独自のネットワークを作成してください!



All Articles