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

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

はじめに


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

ニューラルネットワーク


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


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


例:
健康武器解決策
5011攻撃する
9012攻撃する
8001攻撃する
3011こっそり
6012こっそり
4001こっそり
9017逃げる
6014逃げる
1001逃げる
6010何もしない
10000何もしない

準備する


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でニューラルネットワークを操作するプロセスは、他のプログラミング言語と同じです。 このネットワークを試して、独自のネットワークを作成してください!

Source: https://habr.com/ru/post/J343466/


All Articles