[PYTHON] Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 8 1-4

TOP PAGE

Implementierung der USI-Engine

policy_player.py y = self.model(x) y ist der Wert der Ausgabeschicht, bevor die Aktivierungsfunktion durchlaufen wird.

logits = y.data[0] Weisen Sie den Wert der Ausgabeebene zu, bevor Sie die Aktivierungsfunktion einer Variablen namens logs übergeben. Das Wort logit bedeutet den Wert der Ausgabeebene, bevor die Aktivierungsfunktion durchlaufen wird.

Bedeutung von [0] Ein Beispiel für y.data [[-4.137782 0.12063725 -4.907426 ... -5.663455 -6.104148 -7.8398824 ]] y.data[0] [-4.137782 0.12063725 -4.907426 ... -5.663455 -6.104148 -7.8398824 ]

Beim Generieren von x werden Features in [] eingeschlossen und dann in np.array umgewandelt.  x = Variable(cuda.to_gpu(np.array([features], dtype=np.float32))) Also ist y.data in Form von [[]]? Was ist die Bedeutung von []?

Die Anzahl der Elemente in y.data [0] beträgt (20 + 7) * 9 * 9 = 2187 20 ist die Bewegungsrichtung (UP, DOWN, ...), 7 ist die Art des Stücks, das Sie haben. Die Anzahl der Züge einschließlich aller legalen und illegalen Züge.

In dem in Kapitel 10 angezeigten Wertnetzwerk wird x generiert, ohne es in [] einzuschließen.  x = Variable(cuda.to_gpu(np.array(features, dtype=np.float32))) In Kapitel 10 wird es zuerst nach legaler Hand gefiltert, und es ist etwas anders. Es ist verwirrend, wenn man es einfach vergleicht.

probabilities = F.softmax(y).data[0] Die Wahrscheinlichkeiten sind [1.3974859e-04 9.8799672e-03 6.4728469e-05 ... 3.0391777e-05 1.9559853e-05 3.4478303e-06]

Automatisches Umschalten zwischen GPU / CPU und PC

Lassen Sie es sowohl auf iMac als auch auf Colab laufen.

#Umgebungseinstellung
#-----------------------------
import socket
host = socket.gethostname()
#IP-Adresse abrufen
# google colab  :zufällig
# iMac          : xxxxxxxx
# Lenovo        : yyyyyyyy

# env
# 0: google colab
# 1: iMac (no GPU)
# 2: Lenovo (no GPU)

# gpu_en
# 0: disable
# 1: enable

if host == 'xxxxxxxx':
    env = 1
    gpu_en = 0
elif host == 'yyyyyyyy':
    env = 2
    gpu_en = 0
else:
    env = 0
    gpu_en = 1
if gpu_en == 1:
    from chainer import cuda, Variable
    def __init__(self):
        super().__init__()
        if env == 0:
            self.modelfile = '/content/drive/My Drive/・ ・ ・/python-dlshogi/model/model_policy'
        elif env == 1:
            self.modelfile = r'/Users/・ ・ ・/python-dlshogi/model/model_policy' #Durch Lernen erstelltes Strategienetzwerkmodell
        elif env == 2:
            self.modelfile = r"C:\Users\・ ・ ・\python-dlshogi\model\model_policy"
        self.model = None
            if gpu_en == 1:
                self.model.to_gpu()
        if gpu_en == 1:
            x = Variable(cuda.to_gpu(np.array([features], dtype=np.float32)))
        elif gpu_en == 0:
            x = np.array([features], dtype=np.float32)
            if gpu_en == 1:
                logits = cuda.to_cpu(y.data)[0]
                probabilities = cuda.to_cpu(F.softmax(y).data)[0]
            elif gpu_en == 0:
                logits = y.data[0]
                probabilities = F.softmax(y).data[0]

Strategieeinstellung

Versuchen Sie, zwischen der Greedy-Strategie und der Softmax-Strategie zu wählen. Es war schwer zu verstehen, wie man ein Buch schreibt, deshalb habe ich es umgeschrieben.

#Strategie
# 'greedy':Gierige Strategie
# 'boltzmann':Softmax-Strategie

algorithm ='boltzmann'

        if algorithm == 'greedy':
            #(1) Wählen Sie den Zug mit der höchsten Wahrscheinlichkeit aus (gierige Strategie). Geben Sie einfach das Element mit der höchsten Wahrscheinlichkeit zurück.
            selected_index = greedy(legal_logits)
        elif algorithm =='boltzmann':
            #(2) Wählen Sie einen Zug entsprechend der Wahrscheinlichkeit (Softmax-Strategie). Geben Sie Elemente mit hoher Wahrscheinlichkeit zufällig zurück.
            selected_index = boltzmann(np.array(legal_logits, dtype=np.float32), 0.5)

Alle Codes

python-dlshogi\pydlshogi\player\policy_player.py


#!/usr/bin/env python3
# -*- coding: utf-8 -*-

#Umgebungseinstellung
#-----------------------------
import socket
host = socket.gethostname()
#IP-Adresse abrufen
# google colab  :zufällig
# iMac          : xxxxxxxx
# Lenovo        : yyyyyyyy

# env
# 0: google colab
# 1: iMac (no GPU)
# 2: Lenovo (no GPU)

# gpu_en
# 0: disable
# 1: enable

if host == 'xxxxxxxx':
    env = 1
    gpu_en = 0
elif host == 'yyyyyyyy':
    env = 2
    gpu_en = 0
else:
    env = 0
    gpu_en = 1

#Strategie
# 'greedy':Gierige Strategie
# 'boltzmann':Softmax-Strategie

algorithm ='boltzmann'

#-----------------------------

import numpy as np
import chainer
from chainer import serializers
import chainer.functions as F
if gpu_en == 1:
    from chainer import cuda, Variable

import shogi

from pydlshogi.common import *
from pydlshogi.features import *
from pydlshogi.network.policy import *
from pydlshogi.player.base_player import *

def greedy(logits): #Gibt den Index des Elements mit dem Maximalwert unter den im Argument angegebenen Elementen der Liste zurück
                    #Logs sind die Werte vor dem Übergeben der Aktivierungsfunktion im neuronalen Netzwerk.
    return logits.index(max(logits)) #aufführen.index gibt das number-Element der Liste selbst zurück, dessen Wert im Argument angegeben ist.

def boltzmann(logits, temperature):
    logits /= temperature # a /=b ist a= a /Bedeutung von b
    logits -= logits.max() # a -=b ist a= a -Bedeutung von b. Es wird ein negativer Wert sein. Der Maximalwert ist 0.
    probabilities = np.exp(logits) # x =<0 exp Funktion
    probabilities /= probabilities.sum()
    return np.random.choice(len(logits), p=probabilities) # choice(i, p=b)Ist 0 bis i-Gibt zufällig Zahlen bis zu 1 mit einer Wahrscheinlichkeit von b zurück

class PolicyPlayer(BasePlayer):
    def __init__(self):
        super().__init__()
        if env == 0:
            self.modelfile = '/content/drive/My Drive/・ ・ ・/python-dlshogi/model/model_policy'
        elif env == 1:
            self.modelfile = r'/Users/・ ・ ・/python-dlshogi/model/model_policy' #Durch Lernen erstelltes Strategienetzwerkmodell
        elif env == 2:
            self.modelfile = r"C:\Users\・ ・ ・\python-dlshogi\model\model_policy"
        self.model = None

    def usi(self): #GUI-Softwareseite: Senden Sie den USI-Befehl nach dem Start. USI-Seite: Gibt ID (und Option) und Usiok zurück.
        print('id name policy_player')
        print('option name modelfile type string default ' + self.modelfile)
        print('usiok')

    def setoption(self, option):
        if option[1] == 'modelfile':
            self.modelfile = option[3]

    def isready(self): #GUI-Softwareseite: Der Befehl Senden ist bereit, bevor das Spiel beginnt. USI-Seite: Initialisiert und kehrt bereit in Ordnung zurück.
        if self.model is None:
            self.model = PolicyNetwork()
            if gpu_en == 1:
                self.model.to_gpu()
        serializers.load_npz(self.modelfile, self.model)
        print('readyok')

    def go(self):
        if self.board.is_game_over():
            print('bestmove resign')
            return

        features = make_input_features_from_board(self.board)
        if gpu_en == 1:
            x = Variable(cuda.to_gpu(np.array([features], dtype=np.float32)))
        elif gpu_en == 0:
            x = np.array([features], dtype=np.float32)

        with chainer.no_backprop_mode():
            y = self.model(x)

            if gpu_en == 1:
                logits = cuda.to_cpu(y.data)[0]
                probabilities = cuda.to_cpu(F.softmax(y).data)[0]
            elif gpu_en == 0:
                logits = y.data[0] #Weisen Sie den Wert zu, bevor Sie die Aktivierungsfunktion der Variablen übergeben. Nehmen Sie das erste Element wie unten gezeigt heraus.
                                    # y.Daten sind[[-4.137782    0.12063725 -4.907426   ... -5.663455   -6.104148  -7.8398824 ]]
                                    # y.data[0]Ist[-4.137782    0.12063725 -4.907426   ... -5.663455   -6.104148  -7.8398824 ]
                                    #Übrigens, y.data[0]Die Anzahl der Elemente von(20 + 7) * 9 * 9 = 2187
                probabilities = F.softmax(y).data[0]
                                    #Wahrscheinlichkeiten[1.3974859e-04 9.8799672e-03 6.4728469e-05 ... 3.0391777e-05 1.9559853e-05 3.4478303e-06]

        #Über alle legalen Hände
        legal_moves = []
        legal_logits = []
        for move in self.board.legal_moves:
            #In Etikett konvertieren
            label = make_output_label(move, self.board.turn) #Bewegungsrichtung+Ersetzen Sie 27 des Besitzstücks und 9x9 des zu kennzeichnenden Bestimmungsortes
            #Wahrscheinlichkeit eines legalen Umzugs und seines Umzugs(logits)Geschäft
            legal_moves.append(move)
            legal_logits.append(logits[label]) #label repräsentiert den Index der Bewegung. Legal die Wahrscheinlichkeit dieses Umzugs_Logs zuweisen.
            #Wahrscheinlichkeit anzeigen
            print('info string {:5} : {:.5f}'.format(move.usi(), probabilities[label]))

        if algorithm == 'greedy':
            #(1) Wählen Sie den Zug mit der höchsten Wahrscheinlichkeit aus (gierige Strategie). Geben Sie einfach das Element mit der höchsten Wahrscheinlichkeit zurück.
            selected_index = greedy(legal_logits)
        elif algorithm =='boltzmann':
            #(2) Wählen Sie einen Zug entsprechend der Wahrscheinlichkeit (Softmax-Strategie). Geben Sie Elemente mit hoher Wahrscheinlichkeit zufällig zurück.
            selected_index = boltzmann(np.array(legal_logits, dtype=np.float32), 0.5)

        bestmove = legal_moves[selected_index]

        print('bestmove', bestmove.usi())

Prüfung

Test über die Kommandozeile

2g2f (2 6 Schritte) 0,48551 7g7f (7 sechs Schritte) 0,40747 Ich zeigte auf zwei sechs Schritte. Es scheint kein Problem zu geben. image.png

Getestet von Google Colab

Diesmal zeigte ich auf 76 Schritte. Es scheint, dass die Softmax-Strategie zufällig auf eine Hand mit hoher Wahrscheinlichkeit zeigt. Kein Problem. image.png

Koordinate

image.png

Recommended Posts

Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 11
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 8
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 12 3
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 7
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 10
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 7 5-7
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 9
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 12 3
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 12 3
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 12 1-2
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 12 3 ~ 5
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 7 9
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 8 1-4
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 12 3
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 7 8
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 7 1-4
Deep Learning mit Shogi AI auf Mac und Google Colab
Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 1-6
Lernen Sie mit Shogi AI Deep Learning auf Mac und Google Colab Verwenden Sie Google Colab
Tiefes Lernen auf Mac- und Google Colab-Wörtern, die mit Shogi AI gelernt wurden
Maschinelles Lernen mit Pytorch in Google Colab
Über das Lernen mit Google Colab
"Learning word2vec" und "Visualisierung mit Tensorboard" auf Colaboratory
Deep Learning von Grund auf neu Die Theorie und Implementierung des mit Python erlernten Deep Learning Kapitel 3
Installieren Sie Selenium auf Ihrem Mac und probieren Sie es mit Python aus
Deep Learning Bildanalyse beginnend mit Kaggle und Keras
[AI] Deep Metric Learning
Vorhersagen von Tags durch Extrahieren von Musikfunktionen mit Deep Learning
"Deep Learning from Grund" Memo zum Selbststudium (Nr. 14) Führen Sie das Programm in Kapitel 4 in Google Colaboratory aus
[Google Colab] So unterbrechen Sie das Lernen und setzen es dann fort
Erkennen Sie Ihren Chef mit Deep Learning und verbergen Sie den Bildschirm
Ein Fehler, der beim Erlernen von YOLO mit Google Colab aufgetreten ist
Einstellungen der Python3-basierten maschinellen Lernumgebung auf dem Mac (Koexistenz mit Python2)
HIKAKIN und Max Murai mit Live-Spielvideo und Deep Learning
Versuchen Sie es mit TensorFlow
Deep Kernel Learning mit Pyro
Versuchen Sie Deep Learning mit FPGA
Catalina auf Mac und Pyenv
Generiere Pokemon mit Deep Learning
Erstellen Sie mit Python und GAS Termine für AtCoder-Wettbewerbe in Google Kalender
Erstellen Sie mit Anaconda und PyCharm eine Python-Umgebung auf Ihrem Mac
Fehler und Lösung bei der Installation von Python3 mit Homebrew auf einem Mac (Catalina 10.15)
So führen Sie Jupyter und Spark auf einem Mac mit minimalen Einstellungen aus
[Lesehinweis] Praktisches maschinelles Lernen mit Scikit-Learn, Keras und TensorFlow Kapitel 1
Probieren Sie Deep Learning mit FPGA-Select-Gurken aus
Identifikation der Katzenrasse mit Deep Learning
Deep Learning / Deep Learning von Grund auf neu Kapitel 3 Memo
Tensor Flow mit Anakonda auf Mac
MQTT auf Raspberry Pi und Mac
Machen Sie ASCII-Kunst mit tiefem Lernen
Deep Learning / Deep Learning von Null 2 Kapitel 5 Memo
Versuchen Sie es mit TensorFlow Part 2
Einführung von OpenCV in Mac mit Homebrew
Organisation von Plattformen für maschinelles Lernen und tiefes Lernen
Deep Learning / Deep Learning von Null 2 Kapitel 8 Memo
Deep Learning / Deep Learning von Grund auf neu Kapitel 5 Memo
Überprüfen Sie die Kniebeugenform mit tiefem Lernen