[PYTHON] Deep Learning mit Shogi AI auf Mac und Google Colab Kapitel 10 6-9

TOP PAGE

1 Handsuche AI (search1_player.py)

Ort der legalen Handfilterung

Der Ort der legalen Handfilterung liegt vor dem Richtliniennetzwerk. Mein Ziel ist? Reduzierte Speichernutzung? Beachten Sie, dass sich die Bedeutung der Variablen möglicherweise von der des Richtliniennetzwerks unterscheidet. (Legal_logits und logits)

features.append(make_input_features_from_board(self.board)) Ausgabe von make_input_features_from_board: Wo das erste Stück ist, das erste Stück, das zweite Stück, das zweite Stück [(9 × 9-Matrix), (9 × 9-Matrix), ... (18 + 4 + 4 + 4 + 4 + 2 + 2), (9 × 9-Matrix), (9x9 Matrix), ... (18 + 4 + 4 + 4 + 4 + 2 + 2)] Dieses Array wird zu Funktionen hinzugefügt, die so viele wie legale Bewegungen enthalten. [[Dieses Array], [Dieses Array], ..., [Dieses Array]]. Die Anzahl der Elemente ist die Anzahl der legalen Hände, da sie nach dem Filtern der legalen Hände ausgeführt wird. Wenn Sie beispielsweise Anfänger sind, beträgt die Anzahl der Elemente 30.

y.data Ein Beispiel für y.data

[[-0.04460792]
 [ 0.02167853]
 [ 0.04610606]
・ ・ ・
 [-0.09904062]]

y.data.reshape(-1)

 [-0.04460792  0.02167853  0.04610606 -0.10492548 -0.22675163 -0.23193529
  -0.06671577  0.02509898 -0.02109829 -0.05519588 -0.05578787 -0.03609923
  -0.11021192 -0.10877373 -0.04065045 -0.01540023 -0.0336022  -0.03805592
   -0.03325626 -0.02194545 -0.08399387 -0.13204134 -0.2106831  -0.24970257
   -0.18735377 -0.08184412 -0.15573277 -0.00548664 -0.0353202  -0.09904062]

Die Anzahl der Elemente ist die Anzahl der legalen Hände, da sie nach dem Filtern der legalen Hände ausgeführt wird. Das Obige ist ein Beispiel für das Drucken in der ersten Stufe. Der erste Zug besteht aus 30 legalen Zügen, es gibt also 30 Elemente.

for i, move in enumerate(legal_moves): Aufzählung gibt Index und Wert zurück Im Richtliniennetzwerk wurde make_output_label verwendet, um den Index abzurufen. Die Hauptbedeutung ist leichter zu verstehen. Es gibt jedoch viele Beschreibungen. Das Wertnetzwerk verwendet enumerate, um den Index abzurufen. Die Hauptbedeutung ist schwer zu verstehen, aber die Beschreibung ist einfach. Es scheint, dass die Bedeutung des Tuns dieselbe ist.

python-dlshogi\pydlshogi\player\search1_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.value 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 np.argmax(logits)
    #Protokolliert im Richtliniennetzwerk.index(max(logits))War Selbe Bedeutung. Vereinfachen Sie die Beschreibung nach und nach?

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 Search1Player(BasePlayer):
    def __init__(self):
        super().__init__()
        if env == 0:
            self.modelfile = '/content/drive/My Drive/・ ・ ・/python-dlshogi/model/model_value'
        elif env == 1:
            self.modelfile = r'/Users/・ ・ ・/python-dlshogi/model/model_value' #Wertnetzwerkmodell durch Lernen erstellt
        elif env == 2:
            self.modelfile = r"C:\Users\・ ・ ・\python-dlshogi\model\model_value"
        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 search1_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): #Seite der GUI-Software: 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 = ValueNetwork()
            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

        #Über alle legalen Hände
        #Der Ort der legalen Handfilterung liegt vor dem Richtliniennetzwerk.
        #Mein Ziel ist? Reduzierte Speichernutzung?
        #Beachten Sie, dass sich die Bedeutung der Variablen möglicherweise von der des Richtliniennetzwerks unterscheidet.(leagal_logits und logits)
        legal_moves = []
        features = []
        for move in self.board.legal_moves:
            legal_moves.append(move)

            self.board.push(move) #1 Hand

            features.append(make_input_features_from_board(self.board))
            # make_input_features_from_Board-Ausgabe: Wo das erste Stück ist, das erste Stück, das zweite Stück, das zweite Stück
            # [(9x9 Matrix),
            # (9x9 Matrix),... ist (18 + 4 + 4 + 4 + 4 + 2 + 2),
            # (9x9 Matrix),
            # (9x9 Matrix),... ist (18 + 4 + 4 + 4 + 4 + 2 + 2)]
            #Dieses Array wird zu Funktionen hinzugefügt, die so viele wie legale Bewegungen enthalten.[[Dieses Array],[Dieses Array],・ ・ ・,[Dieses Array]]。
            #Die Anzahl der Elemente ist die Anzahl der legalen Schritte. Wenn Sie beispielsweise Anfänger sind, beträgt die Anzahl der Elemente 30.

            self.board.pop() #1 Nacharbeit

        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)

        #Invertieren Sie den Code, um die Gewinnrate auf Ihrer Turn-Seite zu erhalten
        with chainer.no_backprop_mode():
            y = -self.model(x)

            if gpu_en == 1:
                logits = cuda.to_cpu(y.data).reshape(-1) # reshape(-1)Erstellen Sie ein eindimensionales Array mit
                probabilities = cuda.to_cpu(F.sigmoid(y).data).reshape(-1)
            elif gpu_en == 0:
                logits = y.data.reshape(-1) #Übrigens, y.Die Anzahl der Elemente in Daten ist die Anzahl der legalen Bewegungen. Zum Beispiel 30 für den ersten Zug.
                probabilities = F.sigmoid(y).data.reshape(-1)
                # y.Ein Beispiel für Daten
                # [[-0.04460792]
                #  [ 0.02167853]
                #  [ 0.04610606]
                #・ ・ ・
                #  [-0.09904062]]
                #
                # y.data.reshape(-1)
                #  [-0.04460792  0.02167853  0.04610606 -0.10492548 -0.22675163 -0.23193529
                #   -0.06671577  0.02509898 -0.02109829 -0.05519588 -0.05578787 -0.03609923
                #   -0.11021192 -0.10877373 -0.04065045 -0.01540023 -0.0336022  -0.03805592
                #    -0.03325626 -0.02194545 -0.08399387 -0.13204134 -0.2106831  -0.24970257
                #    -0.18735377 -0.08184412 -0.15573277 -0.00548664 -0.0353202  -0.09904062]
                #Die Anzahl der Elemente ist die Anzahl der legalen Schritte. Das Obige ist ein Beispiel für den ersten Zug, und da es 30 legale Züge gibt, gibt es 30 Elemente.

            for i, move in enumerate(legal_moves):
            #Aufzählung gibt Index und Wert zurück
            #Machen Sie, um den Index im Richtliniennetzwerk abzurufen_output_Ich habe beschriftet.
            #Die Hauptbedeutung ist leichter zu verstehen. Es gibt jedoch viele Beschreibungen.
            #Das Wertnetzwerk verwendet enumerate, um den Index abzurufen.
            #Die Hauptbedeutung ist schwer zu verstehen, aber die Beschreibung ist einfach. Es scheint, dass die Bedeutung des Tuns dieselbe ist.
                #Wahrscheinlichkeit anzeigen
                print('info string {:5} : {:.5f}'.format(move.usi(), probabilities[i]))
                print(y.data)
                print(y.data.reshape(-1))

        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(logits)
        elif algorithm =='boltzmann':
            #(2) Wählen Sie eine Hand entsprechend der Wahrscheinlichkeit (Softmax-Strategie). Geben Sie Elemente mit hoher Wahrscheinlichkeit zufällig zurück.
            selected_index = boltzmann(np.array(logits, dtype=np.float32), 0.5)

        bestmove = legal_moves[selected_index]

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

Spiel

KI, die nur das Wertnetzwerk verwendet und nur eine Einhandsuche durchführt. Es ist zu schwach.

Spielvideo https://youtu.be/W3ZqlcDg_yE

Letzte Karte 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 6-9
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
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 5-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
Schritte zum schnellen Erstellen einer umfassenden Lernumgebung auf einem Mac mit TensorFlow und OpenCV
Spielen Sie mit Turtle auf 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
Die stärkste Möglichkeit, MeCab und CaboCha mit Google Colab zu verwenden
[Lesehinweis] Praktisches maschinelles Lernen mit Scikit-Learn, Keras und TensorFlow Kapitel 1
Installieren Sie lp_solve unter Mac OSX und rufen Sie es mit Python auf.
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