はじめに
Golangプログラミング言語を学び始めて、私はこの言語が機械学習で何ができるのだろうと思いました。 次に、この言語のNSのコード例を探し始めました。 残念ながら、賢明なものは見つかりませんでした。 そして、 この記事のGOの下でNAを書き直すことにしました。
ニューラルネットワーク
ニューラルネットワークのタスクは、3つのパラメーターに基づいてキャラクターに何をするかを決定することです。
- 健康の量(1〜100)
- 武器の存在
- 敵の数
結果に応じて、次のいずれかの決定を行うことができます。
- 攻撃する
- こっそり
- 逃げる
- 何もしない
例:
健康 | 武器 | 敵 | 解決策 |
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でニューラルネットワークを操作するプロセスは、他のプログラミング言語と同じです。 このネットワークを試して、独自のネットワークを作成してください!