Colabでのtensorboardの起動
解決したいこと
Google Colabでセル内でtensorboardを起動したいのですが出来ません
発生している問題・エラー
エラーのメッセージはなく、何かを表示しようとしたのか出力セルは大きくなっています
また画像にあるようにイベントファイルも出力されています
該当するソースコード
from google.colab import drive
drive.mount('/content/drive')
!pip install gymnasium
!pip install tensorboardX
# Load the TensorBoard notebook extension
%load_ext tensorboard
import gymnasium as gym
from collections import namedtuple
import numpy as np
from tensorboardX import SummaryWriter
import torch
import torch.nn as nn
import torch.optim as optim
HIDDEN_SIZE = 128
BATCH_SIZE = 16
PERCENTILE = 70
class Net(nn.Module):
def __init__(self, obs_size, hidden_size, n_actions):
super(Net, self).__init__()
self.net = nn.Sequential(
nn.Linear(obs_size, hidden_size),
nn.ReLU(),
nn.Linear(hidden_size, n_actions)
)
def forward(self, x):
return self.net(x)
Episode = namedtuple('Episode', field_names=['reward', 'steps'])
EpisodeStep = namedtuple('EpisodeStep', field_names=['observation', 'action'])
def iterate_batches(env, net, batch_size):
batch = []
episode_reward = 0.0
episode_steps = []
obs = env.reset()
sm = nn.Softmax(dim=0)
obs = obs[0]
while True:
obs_v = torch.FloatTensor(obs)
act_probs_v = sm(net(obs_v))
act_probs = act_probs_v.data.numpy()
action = np.random.choice(len(act_probs), p=act_probs)
next_obs, reward, terminated, truncated, _ = env.step(action)
episode_reward += reward
step = EpisodeStep(observation=obs, action=action)
episode_steps.append(step)
if terminated or truncated:
e = Episode(reward=episode_reward, steps=episode_steps)
batch.append(e)
episode_reward = 0.0
episode_steps = []
next_obs = env.reset()
if len(batch) == batch_size:
yield batch
batch = []
if len(next_obs) == 2:
next_obs = next_obs[0]
obs = next_obs
def filter_batch(batch, percentile):
rewards = list(map(lambda s: s.reward, batch))
reward_bound = np.percentile(rewards, percentile)
reward_mean = float(np.mean(rewards))
train_obs = []
train_act = []
for reward, steps in batch:
if reward < reward_bound:
continue
train_obs.extend(map(lambda step: step.observation, steps))
train_act.extend(map(lambda step: step.action, steps))
train_obs_v = torch.FloatTensor(train_obs)
train_act_v = torch.LongTensor(train_act)
return train_obs_v, train_act_v, reward_bound, reward_mean
if __name__ == "__main__":
env = gym.make("CartPole-v0")
# env = gym.wrappers.Monitor(env, directory="mon", force=True)
obs_size = env.observation_space.shape[0]
n_actions = env.action_space.n
net = Net(obs_size, HIDDEN_SIZE, n_actions)
objective = nn.CrossEntropyLoss()
optimizer = optim.Adam(params=net.parameters(), lr=0.01)
writer = SummaryWriter(comment="-cartpole")
for iter_no, batch in enumerate(iterate_batches(
env, net, BATCH_SIZE)):
obs_v, acts_v, reward_b, reward_m = \
filter_batch(batch, PERCENTILE)
optimizer.zero_grad()
action_scores_v = net(obs_v)
loss_v = objective(action_scores_v, acts_v)
loss_v.backward()
optimizer.step()
print("%d: loss=%.3f, reward_mean=%.1f, rw_bound=%.1f" % (
iter_no, loss_v.item(), reward_m, reward_b))
writer.add_scalar("loss", loss_v.item(), iter_no)
writer.add_scalar("reward_bound", reward_b, iter_no)
writer.add_scalar("reward_mean", reward_m, iter_no)
if reward_m > 199:
print("Solved!")
break
writer.close()
#TensorBoard起動(表示したいログディレクトリを指定)
%tensorboard --logdir=logs
一応全てのコードを載せます。cross-entropy methodを使ったcartpole環境での学習をしています。
バージョンなどは全てデフォルトです
自分で試したこと
ChatGPTさんに聞くとtensorboardはイベントファイルを元に起動するとのことだったので、Google driveをマウントしましたがダメでした。エラーが出ていないことやイベントファイルが作成されていることから、恐らくコードに問題はないと考えましたが、同じような事例が見つからず、解決できそうにないので教えていただきたいです。