ここら辺の続編である。
bleu48.hatenablog.com
bleu48.hatenablog.com
もうちょっと間をおいてから本格的な試行をする予定でしたが書店に並び始めたとのことで以下のやつ公開しておきます。
後半のdlshogiの学習の部分ですが,加納さんは限られたリソースで学習できるように教師データを分割してスクリプトで連続学習できるようにしています。
加納さんはColabでもシェルスクリプトを使うスタイルですが,私のWindows主な環境とは違います。
そもそも学習をPythonでやってるので皆環境は整っているはずということで,シェルスクリプトをPythonに書き換えてみました。学習部を呼ぶところをモジュール呼びにしていたのですが,これだとログファイルが更新されなかったり,教師データが追加読みになっているために積算されたりしたために結局subprocessで落ち着きました。
思ったよりダサい落ちですがシェルスクリプト未経験者が今から学ぶより有用かと思って公開しておきます。
もちろん,Windows環境で動くようになります。(主目的)
import sys
import os
import glob
import subprocess
last = 72
if len(sys.argv) > 1:
last = int(sys.argv[1])
log_dir = "./log"
model_dir = "./model"
data_dir = "./data"
chkp =[int(i[-7:-4]) for i in glob.glob(model_dir+"/checkpoint_"+name+"-???.pth")]
if len(chkp) > 0:
start = max(chkp) + 1
else:
start = 1
for i in range(start, last + 1):
j = i - 1
k = (i - 1) % 24 + 1
src="{0}/floodgate_2019-2021_r3500-{1:03d}.hcpe {0}/suisho3kai-{1:03d}.hcpe {0}/dlshogi_with_gct-{1:03d}.hcpe ".format(data_dir,k)
if i == 1:
resume = ""
else:
resume = "-r {0}/checkpoint_{1}-{2:03d}.pth".format(model_dir, name, j)
if i != last:
model = ""
else:
model = "--model {0}/model_{1}-{2:03d}".format(model_dir, name, i)
checkpoint = "{0}/checkpoint_{1}-{2:03d}.pth".format(model_dir, name, i)
log = "{0}/{1}-{2:03d}.txt".format(log_dir, name, i)
print("epoch",i,"start")
subprocess.call("python -m dlshogi.train "+
src +
data_dir + "/floodgate_test_2017-2018_r3500_eval5000.hcpe " +
"--network "+ name + " " +
resume +
" --checkpoint " + checkpoint + " " +
model +
" --lr_scheduler StepLR(step_size=24,gamma=0.1) " +
"--use_swa " +
"--swa_start_epoch 10 " +
"--use_average " +
"--use_evalfix " +
"--lr 0.04 --batchsize 4096 --use_amp " +
"--log " + log
)