[PYTHON] Versuchen Sie, CNN mit ChainerRL auszuführen

Einführung

Ich habe das Beispiel von QuickStart ein wenig geändert und CNN verschoben. Das Ziel des Lernens ist Ataris "Pong-v0". ChainerRL Quickstart Guide

Ich verweise auf diesen Artikel. Versuchen Sie es mit chainerRL

Ich kann nicht sagen, ob ich richtig lerne, weil ich keine Kenntnisse über Linux, Python und erweitertes Lernen habe, aber ich habe bestätigt, dass es funktioniert. Bitte geben Sie uns Fehler oder Ratschläge.

Umgebung

OS: ubuntu 16.04 python: 3.6.0 chainer: 1.21.0

Paketimport

Es gibt zwei Hauptänderungen unten. Ich habe es verwendet, um den Spielbildschirm in Graustufen zu skalieren und seine Größe zu ändern.

train.py


import chainer
import chainer.functions as F
import chainer.links as L
import chainerrl
import gym
import numpy as np
import datetime
from skimage.color import rgb2gray
from skimage.transform import resize

Spielauswahl etc.

Ich habe diesen Bereich nicht geändert.

train.py


env = gym.make('Pong-v0')
obs = env.reset()
env.render()

Agenteneinstellungen usw.

Ich weiß nicht, wie ich es einstellen soll, also verwende ich das alte Modell für CNN so wie es ist.

train.py


class QFunction(chainer.Chain):
    def __init__(self, n_history=1, n_action=6):
        super().__init__(
            l1=L.Convolution2D(n_history, 32, ksize=8, stride=4, nobias=False, wscale=np.sqrt(2)),
            l2=L.Convolution2D(32, 64, ksize=3, stride=2, nobias=False, wscale=np.sqrt(2)),
            l3=L.Convolution2D(64, 64, ksize=3, stride=1, nobias=False, wscale=np.sqrt(2)),
            l4=L.Linear(3136, 512, wscale=np.sqrt(2)),
            out=L.Linear(512, n_action, initialW=np.zeros((n_action, 512), dtype=np.float32))
        )

    def __call__(self, x, test=False):
        s = chainer.Variable(x)
        h1 = F.relu(self.l1(s))
        h2 = F.relu(self.l2(h1))
        h3 = F.relu(self.l3(h2))
        h4 = F.relu(self.l4(h3))
        h5 = self.out(h4)
        return chainerrl.action_value.DiscreteActionValue(h5)

Gleiches gilt dafür. Ich lerne nicht genug. Mit n_history wird ein Kanal bezeichnet. Dieses Mal habe ich es grau skaliert, also ist der Kanal 1.

train.py


n_action = env.action_space.n
n_history=1
q_func = QFunction(n_history, n_action)

Optimierungseinstellungen usw.

Geänderte Kapazität von 10 ** 6.

optimizer = chainer.optimizers.Adam(eps=1e-2)
optimizer.setup(q_func)

gamma = 0.95

explorer = chainerrl.explorers.ConstantEpsilonGreedy(
    epsilon=0.3, random_action_func=env.action_space.sample)

replay_buffer = chainerrl.replay_buffer.ReplayBuffer(capacity=10 ** 4)

phi = lambda x: x.astype(np.float32, copy=False)

Spielfortschritt etc.

train.py


agent = chainerrl.agents.DoubleDQN(
    q_func, optimizer, replay_buffer, gamma, explorer,
    minibatch_size=4, replay_start_size=500, update_frequency=1,
    target_update_frequency=100, phi=phi)

last_time = datetime.datetime.now()
n_episodes = 1000
for i in range(1, n_episodes + 1):
    obs = resize(rgb2gray(env.reset()),(80,80))
    obs = obs[np.newaxis, :, :]

    reward = 0
    done = False
    R = 0

    while not done:
        action = agent.act_and_train(obs, reward)
        obs, reward, done, _ = env.step(action)
        obs = resize(rgb2gray(obs), (80, 80))
        obs = obs[np.newaxis, :, :]

        if reward != 0:
            R += reward

    elapsed_time = datetime.datetime.now() - last_time
    print('episode:', i, '/', n_episodes,
          'reward:', R,
          'minutes:', elapsed_time.seconds/60)
    last_time = datetime.datetime.now()

    if i % 100 == 0:
        filename = 'agent_Breakout' + str(i)
        agent.save(filename)

    agent.stop_episode_and_train(obs, reward, done)
print('Finished.')

Die Hauptänderungen sind diese beiden Zeilen. Die erste Zeile ist Graustufen und Größenänderung. In der zweiten Zeile habe ich die Form geändert, um sie in Convolution2D einzufügen.

obs = resize(rgb2gray(env.reset()),(80,80))
obs = obs[np.newaxis, :, :]

Ich habe einen Laptop mit 8 GB Speicher verwendet, aber wenn ich die Kapazität auf 10 ** 6 einstelle und ihn nicht in Graustufen skaliere, wird er nach etwa 300 Folgen beendet. Ich weiß nicht, welches funktioniert, aber diese beiden Änderungen haben es behoben.

Wenn Sie ungefähr 200 Folgen studieren, erhalten Sie 21 Punkte hintereinander. Ich habe ungefähr 5 Punkte in 1000 Folgen bekommen. Das Erlernen von 1000 Folgen dauert einen ganzen Tag.

Ich werde es veröffentlichen, weil ich denke, dass es für Anfänger hilfreich sein kann. Wenn Sie Fehler oder Punkte haben, die verbessert werden müssen, geben Sie uns bitte einen Rat.

Recommended Posts

Versuchen Sie, CNN mit ChainerRL auszuführen
Versuchen Sie, Python mit Try Jupyter auszuführen
Lernen stärken 13 Probieren Sie Mountain_car mit ChainerRL aus.
Versuchen Sie, Jupyter mit VS-Code auszuführen
Versuchen Sie, Pyston 0.1 auszuführen
Stärkung des Lernens 11 Probieren Sie OpenAI Acrobot mit ChainerRL aus.
Versuchen Sie, Google Chrome mit Python und Selenium auszuführen
Versuchen Sie, Amazon Timestream auszuführen
Versuchen Sie es mit Python.
Versuchen Sie SNN mit BindsNET
Versuchen Sie eine Regression mit TensorFlow
Versuchen Sie, den Boden durch Rekursion herauszufordern
Versuchen Sie, Python in der mit pipenv erstellten Django-Umgebung auszuführen
CNN mit Keras Versuchen Sie es mit dem Bild, das Sie aufgenommen haben
Versuchen Sie es mit TensorFlow
CNN-Implementierung mit nur Numpy
Versuchen Sie, PythonTex mit Texpad zu verwenden.
Versuchen Sie, RBM mit Chainer zu implementieren.
Versuchen Sie Google Mock mit C.
Versuchen Sie es mit matplotlib mit PyCharm
Versuchen Sie, mit einer Shell zu programmieren!
Versuchen Sie die GUI-Programmierung mit Hy
Versuchen Sie Auto Encoder mit Pytorch
Probieren Sie die Python-Ausgabe mit Haxe 3.2 aus
Versuchen Sie die Matrixoperation mit NumPy
Versuchen Sie, XOR mit PyTorch zu implementieren
Probieren Sie verschiedene Dinge mit PhantomJS aus
Versuchen Sie Deep Learning mit FPGA
Erstellen Sie einfach CNNs mit Keras
Verwenden Sie Maxout + CNN mit Pylearn2
Versuchen Sie, Parfüm mit Go zu implementieren
Überlebe Weihnachten mit CNN auf Charakterebene
Probieren Sie Selenium Grid mit Docker aus
Versuchen Sie die Gesichtserkennung mit Python
Probieren Sie OpenCV mit Google Colaboratory aus
Versuchen Sie es mit Kaggle leicht maschinell
Versuchen Sie TensorFlow MNIST mit RNN
Versuchen Sie, Jupyter Hub mit Docker zu erstellen
Versuchen Sie es mit Folium mit Anakonda
Versuchen Sie, Merkmale von Sensordaten mit CNN zu extrahieren
[Maschinelles Lernen] Versuchen Sie, Spark MLlib mit Python auszuführen, und geben Sie Empfehlungen ab
Probieren Sie Deep Learning mit FPGA-Select-Gurken aus
QR-Code mit CNN entschlüsseln
Versuchen Sie es mit Python + Beautiful Soup
Roboter läuft mit Arduino und Python
Versuchen Sie, Facebook mit Python zu betreiben
Tipps zum Ausführen Gehen Sie mit Docker
Versuchen Sie die Singularwertzerlegung mit Python
Versuchen Sie es mit TensorFlow Part 2
Versuchen Sie es mit einer http-Eingabeaufforderung mit interaktivem http-Zugriff
Probieren Sie die Audiosignalverarbeitung mit librosa-Beginner aus
Versuchen Sie, Pferderennen mit Chainer vorherzusagen
Versuchen Sie, sich mit ONNX Runtime zu profilieren
SVM versucht maschinelles Lernen mit Scikit-Learn
Probieren Sie L Chika mit Himbeerpi
Versuchen Sie die Gesichtserkennung mit Python + OpenCV
Versuchen Sie, Bitcoin mit Pythons Hashlib abzubauen
Anfänger RNN (LSTM) | Versuchen Sie es mit Keras
Versuchen Sie, 3 Servos mit Raspeye zu bewegen
Versuchen Sie die Frequenzsteuerungssimulation mit Python