Was macht die Funktion go () von mcts_player.py?
mcts_player.py Nehmen Sie die folgenden Änderungen vor, bevor Sie das Programm tatsächlich ausführen.
Behoben zu PolicyValueResnet (Blöcke = 5), da ein Fehler auftritt, wenn die Argumentblöcke nicht in PolicyValueResnet () eingegeben werden, das das Modell lädt. 5 ist die gleiche Anzahl von Blöcken wie beim Training dieses Modells.
pydlshogi/player/mcts_player.py
def isready(self):
#Modell laden
if self.model is None:
self.model = PolicyValueResnet(blocks=5)
Lassen Sie die IP-Adresse bestimmen, welcher PC ausgeführt wird. Verwenden Sie das Flag gpu_en, um zu wechseln, ob eine GPU verwendet werden soll. Der Pfad der Modelldatei wird ebenfalls mit dem Flag env umgeschaltet.
pydlshogi/player/mcts_player.py
#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
#-----------------------------
Beim Import
pydlshogi/player/mcts_player.py
if gpu_en == 1:
from chainer import cuda, Variable
def init(self):
pydlshogi/player/mcts_player.py
#Modelldateipfad
if env == 0:
self.modelfile = '/content/drive/My Drive/・ ・ ・/python-dlshogi/model/model_policy_value_resnet'
elif env == 1:
self.modelfile = r'/Users/・ ・ ・/python-dlshogi/model/model_policy_value_resnet'
elif env == 2:
self.modelfile = r"C:\Users\・ ・ ・\python-dlshogi\model\model_policy_value_resnet"
self.model = None #Modell-
def eval_node()
pydlshogi/player/mcts_player.py
if gpu_en == 1:
x = Variable(cuda.to_gpu(np.array(eval_features, dtype=np.float32)))
elif gpu_en == 0:
x = np.array(eval_features, dtype=np.float32)
with chainer.no_backprop_mode():
y1, y2 = self.model(x)
if gpu_en == 1:
logits = cuda.to_cpu(y1.data)[0]
value = cuda.to_cpu(F.sigmoid(y2).data)[0]
elif gpu_en == 0:
logits = y1.data[0]
value = F.sigmoid(y2).data[0]
def isready()
pydlshogi/player/mcts_player.py
#Modell laden
if self.model is None:
self.model = PolicyValueResnet(blocks=5)
if gpu_en == 1:
self.model.to_gpu()
Ich habe das Programm zu Beginn ausgeführt. Infolgedessen wurden 7 6 Schritte 143 Mal und 2 6 Schritte 77 Mal besucht. Es sieht vorerst gut aus. Ich könnte es auf Google Colab tun.
move_count: Anzahl der Besuche an diesem Verschiebungsknoten nnrate: Voraussichtliche Wahrscheinlichkeit eines Richtliniennetzwerks win_rate: Durchschnittliche Gewinnrate (= Gesamtgewinnrate / Anzahl der Besuche) nps : node/time Zeit: Zeitaufwand für einen Durchgang () Knoten: Anzahl der Besuche des aktuellen Knotens (current_node.move_count) hashfull: Belegung der Arrays node_hash und uct_node. Gibt an, wie viele der 4096 Elemente verwendet wurden. Ein numerischer Wert, ausgedrückt als 1000, wenn 100% belegt sind. Punktzahl cp: Bewertungswert pv: Koordinaten verschieben
Aufgrund der obigen Ergebnisse betrug die für jede Ausführung erforderliche Zeit 3524 ms für die CPU und 2020 ms für die GPU. Daher beträgt das GPU / CPU-Geschwindigkeitsverhältnis 3524/2020 = 1,7. Es ist ungefähr doppelt so schnell.
Die Anzahl der Besuche (Knoten) des aktuellen Knotens entspricht 235 für GPU und CPU. Sie können einfach sehen, dass die Geschwindigkeit pro Besuch auf der GPU höher ist.
Für jede Suche wird eine Funktion namens interruption_check () verwendet, um zu bestimmen, ob die Suche in der Mitte beendet werden soll. Die Anzahl der Suchvorgänge ist auf 300 festgelegt. Wenn der beste Zug jedoch nicht überschritten werden kann, auch wenn alle verbleibenden Suchvorgänge für den nächstbesten Zug ausgeführt werden, wird die Suche beendet, auch wenn die Anzahl der Suchvorgänge 300 nicht erreicht hat. Da das obige Ergebnis Knoten 235 ist, ist ersichtlich, dass es nach 235 Mal beendet wurde.
Als Referenz habe ich go () kontinuierlich ausgeführt, um die Anzahl der Besuche am aktuellen Knoten zu zeichnen. Es ist ersichtlich, dass die Anzahl der Besuche des aktuellen Knotens nicht zunimmt, wenn die Häufigkeit, mit der go () ausgeführt wird, zunimmt. Wenn die Häufigkeit, mit der go () ausgeführt wird, zunimmt, nimmt auch die Anzahl der Besuche des untergeordneten Knotens zu, sodass die Suche möglicherweise früher beendet wird.
Ich habe versucht zu verstehen, wie sich die Anzahl der Besuche am aktuellen Knoten abhängig von der Anzahl der Suchvorgänge ändert. Wenn die Anzahl der Besuche auf 6000 oder mehr festgelegt ist, erhöht sich das Ergebnis nicht von 4057. Dies ist nur das Ergebnis am Anfang. Die Ergebnisse variieren je nach Situation.
Spielvideo https://youtu.be/H0jD76R2PAM Selbst (Ama 1. Stufe) gegen Kapitel 12-5 KI Policy Network & Value Network & Monte Carlo Baumsuche. Es gibt keine Parallelisierung. Es war schwächer als ich es mir vorgestellt hatte, weil ich oft seltsame Bewegungen machte.
Letzte Karte
Recommended Posts