[PYTHON] Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 1-2

TOP PAGE

hacher

Un hachage est un nombre qui remplace une phase. Il y a un hachage dans node_hash. Il est utilisé dans le but de relier les informations de situation et de nœud et de traiter diverses choses. image.png

indice

Un total de nombres UCT_HASH_SIZE à partir de 0. 4096 dans le livre. Convertissez la valeur de hachage en index avec hash_to_index () et utilisez la valeur de hachage en association avec l'index. La raison pour laquelle la largeur de 4096 est utilisée au lieu d'utiliser la valeur de hachage telle quelle est parce que la taille du hachage est de 64 bits, ce qui est inutilement grand.

node_hash node_hash est un tableau. Chaque élément est une instance de la classe NodeHashEntry et chaque élément possède des informations de hachage, de rotation, d'effort et d'indicateur. Lors de la création, créez d'abord une instance de la classe NodeHash avec self.xxx = NodeHash (). Un tableau node_hash existe en tant que membre dans cette instance appelé xxx.

Dans le livre, xxx est nommé node_hash, qui est le même nom que le tableau à l'intérieur. Soyez prudent car cela peut prêter à confusion.

Regardez de plus près node_hash

Si vous extrayez uniquement le contour, ce sera comme ça.

UCT_HASH_SIZE = 4 #Doit être de 2 à la nième puissance. 4096 dans le livre. Il a été fixé à 4 pour l'explication.

class NodeHashEntry:
    def __init__(self):
        self.hash = 1     #Valeur de hachage Zobrist. C'est vraiment 0. Il a été mis à 1 pour l'explication.
        self.color = 2    #Tour. C'est vraiment 0. Il a été réglé sur 2 pour l'explication.
        # self.moves = 0    #Omis pour simplifier l'explication.
        # self.flag = False #Omis pour simplifier l'explication.

class NodeHash:
    def __init__(self):
        self.node_hash = [NodeHashEntry() for _ in range(UCT_HASH_SIZE)]

Je vais essayer différentes choses pour comprendre la structure. Tout d'abord, créez une instance a de la classe NodeHash et imprimez-la.

a = NodeHash()
print(a)

Répondre

<__main__.NodeHash object at 0x0000015BDBB54948>

Cette classe a un tableau de noms de variables appelé node_hash, et dans ce cas UCT_HASH_SIZE = 4, donc le nombre d'éléments dans ce tableau est 4. node_hash = [objet NodeHashEntry, objet NodeHashEntry, Objet NodeHashEntry, objet NodeHashEntry].

affiche le tableau node_hash d'un

print(a.node_hash)

Répondre

[<__main__.NodeHashEntry object at 0x0000015BE2B7FD88>, 
<__main__.NodeHashEntry object at 0x0000015BE4E13E48>, 
<__main__.NodeHashEntry object at 0x0000015BE67F0108>, 
<__main__.NodeHashEntry object at 0x0000015BE65B5F08>]

Ces quatre objets ont des variables appelées hachage et couleur, respectivement.

Imprimer le hachage et la couleur de 4 objets

for i in range(4):
    print(a.node_hash[i].hash, a.node_hash[i].color)

Répondre

1 2
1 2
1 2
1 2

uct_node uct_node est un tableau. Chaque élément est une instance de la classe UctNode, et chaque élément a le nombre de visites sur le nœud, le taux de réussite total, le nombre de nœuds enfants, le déplacement du nœud enfant, l'index du nœud enfant, le nombre de visites sur le nœud enfant et le taux de réussite du nœud enfant. Il contient des informations sur les totaux, les taux de victoire prévus pour les réseaux politiques, les taux de victoire prévus pour les réseaux de valeur et les indicateurs évalués. Lors de la génération, self.uct_node = [UctNode () for _ in range (UCT_HASH_SIZE)].

search_empty_index() Une méthode pour rechercher les index inutilisés. Les arguments sont le hachage, la rotation et l'effort.

Ce qu'il fait, c'est générer un index à partir du hachage et vérifier si l'élément à cet index dans le tableau node_hash est inutilisé. S'il n'est pas utilisé, le hachage, la rotation et l'effort de l'argument sont affectés à l'élément, et un indicateur indiquant que l'élément est utilisé est défini. S'il a été utilisé, ajoutez 1 à l'index et faites de même jusqu'à ce qu'il contourne tous les index. S'il n'y a pas d'index inutilisé après un tour, UCT_HASH_SIZE est renvoyé.

Par exemple, si UCT_HASH_SIZE = 4096 et qu'il y a un index inutilisé, le hachage, la rotation et le nombre de mouvements sont affectés au premier élément de hit parmi les 4096 éléments de node_hash [0] à node_hash [4095], et un indicateur est défini pour se terminer. S'il n'y a pas d'index inutilisé, la valeur de 4096 est renvoyée et le processus se termine.

find_same_hash_index() Une méthode pour trouver l'index correspondant à la situation. Les arguments sont le hachage, la rotation et l'effort.

Ce qu'il fait, c'est générer un index à partir du hachage et vérifier si l'élément à cet index dans le tableau node_hash est inutilisé. Renvoie UCT_HASH_SIZE s'il n'est pas utilisé. Si le hachage, la rotation et l'effort de l'élément correspondent à l'argument utilisé, l'index est renvoyé. Faites de même jusqu'à ce que vous parcouriez tous les index tout en ajoutant 1 à l'index. S'il n'y a aucun index qui correspond à l'argument après un tour, UCT_HASH_SIZE est renvoyé.

Par exemple, si UCT_HASH_SIZE = 4096 et qu'un élément correspond au hachage, à la rotation et à l'effort de l'argument, l'index de cet élément (qui est l'un des 4096 de 0 à 4095) est renvoyé et le processus se termine. S'il n'y a pas d'élément correspondant, la valeur de 4096 est renvoyée et le processus se termine.

Search_empty_index () et find_same_hash_index () sont dans la même instance que le tableau node_hash. Par conséquent, lors de son utilisation, utilisez self. Instance name.search_empty_index (). Notez que le nom de l'instance est node_hash dans le livre, et qu'il semble être déroutant avec le même nom que node_hash dans le tableau de membres.

Recommended Posts

Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 11
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 8
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 3
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 7
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 10 6-9
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 10
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 7 5-7
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 9
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 3
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 3
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 1-2
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 3
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 3 ~ 5
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 7 9
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 8 5-9
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 8 1-4
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 12 3
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 7 8
Deep Learning avec Shogi AI sur Mac et Google Colab Chapitre 7 1-4
Apprentissage en profondeur avec Shogi AI sur Mac et Google Colab
Apprentissage en profondeur avec Shogi AI sur Mac et Google Colab Chapitres 1 à 6
Apprenez avec Shogi AI Deep Learning sur Mac et Google Colab Utilisez Google Colab
Apprentissage en profondeur sur Mac et Google Colab mots appris avec Shogi AI
Apprentissage automatique avec Pytorch sur Google Colab
À propos de l'apprentissage avec Google Colab
Étapes pour créer rapidement un environnement d'apprentissage en profondeur sur Mac avec TensorFlow et OpenCV
Jouez avec Turtle sur Google Colab
"Apprentissage de word2vec" et "Visualisation avec Tensorboard" sur Colaboratory
Deep Learning from scratch La théorie et la mise en œuvre de l'apprentissage profond appris avec Python Chapitre 3
Analyse d'images par apprentissage profond à partir de Kaggle et Keras
Prédire les tags en extrayant des fonctionnalités musicales avec Deep Learning
"Deep Learning from scratch" Mémo d'auto-apprentissage (n ° 14) Exécutez le programme du chapitre 4 sur Google Colaboratory
[Google Colab] Comment interrompre l'apprentissage, puis le reprendre
Une erreur survenue lors de l'apprentissage de YOLO avec Google Colab
Paramètres d'environnement d'apprentissage automatique basés sur Python3 sur Mac (coexistence avec Python2)
HIKAKIN et Max Murai avec vidéo de jeu en direct et apprentissage en profondeur
Essayez l'apprentissage en profondeur avec TensorFlow
Apprentissage profond du noyau avec Pyro
Catalina sur Mac et pyenv
Générez des Pokémon avec Deep Learning
Créez des rendez-vous pour le concours AtCoder sur Google Agenda avec Python et GAS
Créez un environnement Python sur votre Mac avec Anaconda et PyCharm
Erreur et solution lors de l'installation de python3 avec homebrew sur mac (catalina 10.15)
Comment exécuter Jupyter et Spark sur Mac avec des paramètres minimaux
La meilleure façon d'utiliser MeCab et CaboCha avec Google Colab
[Note de lecture] Apprentissage automatique pratique avec Scikit-Learn, Keras et TensorFlow Chapitre 1
Installez lp_solve sur Mac OSX et appelez-le avec python.
Deep learning / Deep learning from scratch 2 Chapitre 4 Mémo
Essayez le Deep Learning avec les concombres FPGA-Select
Identification de la race de chat avec Deep Learning
Deep learning / Deep learning made from scratch Chapitre 3 Mémo
flux tensoriel avec anaconda sur mac
MQTT sur Raspberry Pi et Mac
Faites de l'art ASCII avec l'apprentissage en profondeur
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 5 Mémo
Organisez des plateformes d'apprentissage automatique et d'apprentissage en profondeur
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 7 Mémo