【쇼기 AI】「쇼기 AI에서 배우는 딥 러닝」을 읽는다♪~소스 코드의 구성과 기보 준비
18471 단어 데이터 분석파이썬딥러닝DeepLearning
넷째 밤은 프로젝트의 디렉토리 구성과 기보 다운로드에 대해 설명합니다.
설명하고 싶은 것
(1) 프로젝트의 디렉토리 구성
(2) 기보 다운로드
(3) 기보를 청소한다
(1) 프로젝트의 디렉토리 구성
디렉토리 구성은 다음과 같습니다. 이러한 구성으로 디렉토리를 작성합니다.
PJのディレクトリ
| setup.py
| train_policy.py
| kiflist_train.txt
| kiflist_test.txt
| kiflist_train_1000.txt
| kiflist_test_100.txt
├── model
| model_policy
|── pydlshogi
| |common.py
| |features.py
| |read_kifu.py
| └── network
| policy.py
└── utils
filter_csa.py
make_kifu_list.py
plot_log.py
각 리소스를 각 디렉터리에 저장합니다.
그리고 다음의 코드를 실행하는 것으로, 프로그램에 import 할 수 있게 됩니다.
pip install --no-cache-dir -e .
import setuptools
setuptools.setup(
name = 'python-dlshogi',
version = '0.0.1',
author = '',
packages = ['pydlshogi'],
scripts = [],
)
(2) 기보 다운로드
컴퓨터 도장 대국장 에서 2016년 기보를 다운로드합니다.
다운로드한 파일은 7z 형식으로 압축되어 있으므로 7-Zip 에서 압축을 풉니다.
(3) 기보를 청소한다
다음 프로그램에서 조건 이외의 기보를 삭제하는 프로그램을 실행합니다.
※본서에서는 예로서 이하의 조건으로 기보를 추출하고 있습니다
・投了で終了
・手数50手以上
・対局プログラムのRatingが2500以上
filter_csa.py
import argparse
import os
import re
import statistics
parser = argparse.ArgumentParser()
parser.add_argument('dir', type=str)
args = parser.parse_args()
def find_all_files(directory):
for root, dirs, files in os.walk(directory):
for file in files:
yield os.path.join(root, file)
ptn_rate = re.compile(r"^'(black|white)_rate:.*:(.*)$")
kifu_count = 0
rates = []
for filepath in find_all_files(args.dir):
rate = {}
move_len = 0
toryo = False
for line in open(filepath, 'r', encoding='utf-8'):
line = line.strip()
m = ptn_rate.match(line)
if m:
rate[m.group(1)] = float(m.group(2))
if line[:1] == '+' or line[:1] == '-':
move_len += 1
if line == '%TORYO':
toryo = True
if not toryo or move_len <= 50 or len(rate) < 2 or min(rate.values()) < 2500:
os.remove(filepath)
else:
kifu_count += 1
rates.extend([_ for _ in rate.values()])
print('kifu count :', kifu_count)
print('rate mean : {}'.format(statistics.mean(rates)))
print('rate median : {}'.format(statistics.median(rates)))
print('rate max : {}'.format(max(rates)))
print('rate min : {}'.format(min(rates)))
실행 결과는 다음과 같습니다.
>python utils\filter_csa.py D:\wdoor2016
kifu count : 29758
rate mean : 3063.189260030916
rate median : 3066.0
rate max : 3825.0
rate min : 2502.0
추출 조건을 조금 바꾸면 다음과 같은 결과가 얻어졌다.
>python utils\filter_csa.py D:\wdoor2016
kifu count : 13990
rate mean : 3228.983166547534
rate median : 3216.0
rate max : 3825.0
rate min : 3000.0
훈련 데이터와 테스트 데이터로 분할
훈련 데이터와 테스트 데이터를 다음과 같이 분할합니다.
분할 비율은 다음 입력으로 제공됩니다.
parser.add_argument('--ratio', type=float, default=0.9)
import argparse
import os
import random
parser = argparse.ArgumentParser()
parser.add_argument('dir', type=str)
parser.add_argument('filename', type=str)
parser.add_argument('--ratio', type=float, default=0.9)
args = parser.parse_args()
kifu_list = []
for root, dirs, files in os.walk(args.dir):
for file in files:
kifu_list.append(os.path.join(root, file))
# シャッフル
random.shuffle(kifu_list)
# 訓練データとテストデータに分けて保存
train_len = int(len(kifu_list) * args.ratio)
with open(args.filename + '_train.txt', 'w') as f:
for i in range(train_len):
f.write(kifu_list[i])
f.write('\n')
with open(args.filename + '_test.txt', 'w') as f:
for i in range(train_len, len(kifu_list)):
f.write(kifu_list[i])
f.write('\n')
print('total kifu num = {}'.format(len(kifu_list)))
print('train kifu num = {}'.format(train_len))
print('test kifu num = {}'.format(len(kifu_list) - train_len))
읽은 기보를 셔플하고 나서 분할하고 있습니다.
실제로 움직여 보면 다음과 같은 결과가 출력되고,
make_kifu_list.py
>python utils\make_kifu_list.py D:\wdoor2016 kifulist3000
total kifu num = 13990
train kifu num = 12591
test kifu num = 1399
그래서 kifulist3000_test.txt와 kifulist3000_train.txt라는 두 개의 파일이 새로 만들어졌습니다.
요약
· 프로그램 등의 디렉토리 구성을 작성했습니다.
· 기보를 Floodgate에서 다운로드했습니다.
・기보를 조건을 설정하여 훈련 데이터와 테스트 데이터를 작성했다
Reference
이 문제에 관하여(【쇼기 AI】「쇼기 AI에서 배우는 딥 러닝」을 읽는다♪~소스 코드의 구성과 기보 준비), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/MuAuan/items/54c827a09b88475802cc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)