TensorFlow : Dopamine : 実験スタッツのロード & Tensorboard による可視化 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 09/01/2018
* 本ページは、Dopamin レポジトリ の以下のページを翻訳した上で適宜、補足説明したものです:
- github.com/google/dopamine/blob/master/dopamine/colab/load_statistics.ipynb
- github.com/google/dopamine/blob/master/dopamine/colab/tensorboard.ipynb
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
Dopamine : 実験スタッツのロード
この colab はどのように実験のスタッツをロードしてそれをプロットできるかを示します。Dopamine 上で訓練された、修正された Rainbow エージェントのためのサンプル・スタッツファイルを提供します。このサンプルデータのパフォーマンスは標準的な設定を反映してはいないことに注意してください、それは説明のためだけにコンパイルされています。
- 例 1 は baseline をロードしてそれらを貴方の実験に対してプロットするためにどのように colab を使用するかを示します。
- 例 2 は違うパッケージを使用して生実験スタッツをどのようにロードしてプロットするかを示します。
この colab を再実行するためには、各セルを順番に実行します。
# @title Install necessary packages. !pip install --upgrade --no-cache-dir dopamine-rl !pip install cmake !pip install atari_py
# @title Necessary imports and globals. import numpy as np import os from dopamine.agents.dqn import dqn_agent from dopamine.atari import run_experiment from dopamine.colab import utils as colab_utils from absl import flags BASE_PATH = '/tmp/colab_dope_run' # @param GAMES = ['Asterix', 'Pong', 'SpaceInvaders'] # @param
# @title Load the sample log files. # For illustrative purposes, we are providing sample logs of the Rainbow agent # trained without sticky actions. !gsutil -q -m cp -R gs://download-dopamine-rl/colab/* /content/
例 1: Dopamine baseline に対してプロットする
# @title Load the baseline data
!gsutil -q -m cp -R gs://download-dopamine-rl/preprocessed-benchmarks/* /content/
experimental_data = colab_utils.load_baselines('/content')
# @title Load the summarized sample data and add it to the global data frame.
import collections
# Now read the data for our samples in a summarized fashion. The files will be
# in the local directory /content/samples/rainbow/GAME_v4, so we make use of
# the parameter_set and job_descriptor parameters.
parameter_set = collections.OrderedDict([
('agent', ['rainbow']),
('game', GAMES)
])
sample_data = colab_utils.read_experiment(
'/content/samples',
parameter_set=parameter_set,
job_descriptor='{}/{}_v4',
summary_keys=['train_episode_returns'])
sample_data['agent'] = 'Sample Rainbow'
sample_data['run_number'] = 1
for game in GAMES:
experimental_data[game] = experimental_data[game].merge(
sample_data[sample_data.game == game], how='outer')
# @title Plot the sample agent data against the baselines.# @title
import seaborn as sns
import matplotlib.pyplot as plt
for game in GAMES:
fig, ax = plt.subplots(figsize=(16,8))
sns.tsplot(data=experimental_data[game], time='iteration', unit='run_number',
condition='agent', value='train_episode_returns', ax=ax)
plt.title(game)
plt.show()



例 2 : 違うパッケージを使用してサンプル実験のための生データをロードしてプロットする
import matplotlib.pyplot as plt
for game in GAMES:
# Use our provided colab utils to load this log file. The second returned
raw_data, _ = colab_utils.load_statistics(
'/content/samples/rainbow/{}_v4/logs'.format(game), verbose=False)
summarized_data = colab_utils.summarize_data(
raw_data, ['train_episode_returns'])
plt.plot(summarized_data['train_episode_returns'], label='episode returns')
plt.plot()
plt.title('Rainbow training - {}'.format(game))
plt.xlabel('Iteration')
plt.ylabel('Return')
plt.legend()
plt.show()

Dopamine : Dopamine baseline を Tensorboard で可視化する
この colab は訓練された baseline を TensorBoard で簡単に可視化することを可能にします (貴方のローカルマシンに Tensorboard を持たない場合でさえも!)。
単純に可視化したいゲームを指定してからセルを順番に実行します。
Tensorboard のセットアップのための手順は https://www.dlology.com/blog/quick-guide-to-run-tensorboard-in-google-colab/ で得られます。
# @title Prepare all necessary files and binaries. !wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip !unzip ngrok-stable-linux-amd64.zip !gsutil -q -m cp -R gs://download-dopamine-rl/compiled_tb_event_files.tar.gz /content/ !tar -xvzf /content/compiled_tb_event_files.tar.gz
# @title Select which game to visualize.
game = 'Asterix' # @param['AirRaid', 'Alien', 'Amidar', 'Assault', 'Asterix', 'Asteroids', 'Atlantis', 'BankHeist', 'BattleZone', 'BeamRider', 'Berzerk', 'Bowling', 'Boxing', 'Breakout', 'Carnival', 'Centipede', 'ChopperCommand', 'CrazyClimber', 'DemonAttack', 'DoubleDunk', 'ElevatorAction', 'Enduro', 'FishingDerby', 'Freeway', 'Frostbite', 'Gopher', 'Gravitar', 'Hero', 'IceHockey', 'Jamesbond', 'JourneyEscape', 'Kangaroo', 'Krull', 'KungFuMaster', 'MontezumaRevenge', 'MsPacman', 'NameThisGame', 'Phoenix', 'Pitfall', 'Pong', 'Pooyan', 'PrivateEye', 'Qbert', 'Riverraid', 'RoadRunner', 'Robotank', 'Seaquest', 'Skiing', 'Solaris', 'SpaceInvaders', 'StarGunner', 'Tennis', 'TimePilot', 'Tutankham', 'UpNDown', 'Venture', 'VideoPinball', 'WizardOfWor', 'YarsRevenge', 'Zaxxon']
agents = ['dqn', 'c51', 'rainbow', 'implicit_quantile']
for agent in agents:
for run in range(1, 6):
!mkdir -p "/content/$game/$agent/$run"
!cp -r "/content/$agent/$game/$run" "/content/$game/$agent/$run"
LOG_DIR = '/content/{}'.format(game)
get_ipython().system_raw(
'tensorboard --logdir {} --host 0.0.0.0 --port 6006 &'
.format(LOG_DIR)
)
# @title Start the tensorboard
get_ipython().system_raw('./ngrok http 6006 &')
! curl -s http://localhost:4040/api/tunnels | python3 -c \
"import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
以上