メモです

メモです

TensorFlow Neural Machine Translation (seq2seq) TutorialをWindows10+Cygwin64+PowerShellでやると大変だった

Windows10+Cygwin64+PowerShell

TensorflowのNMTのチュートリアル

GitHub - tensorflow/nmt: TensorFlow Neural Machine Translation Tutorial

をやったらきつかった。

以下、はまったとこのメモ

①「ImportError: attempted relative import with no known parent package」が出る

ImportError: attempted relative import with no known parent packageの解決方法 - Qiita

②tmpフォルダの位置

f:id:tanaka-kiiti:20180524000950p:plain

Cygwincurlをインストール

開発ツール/CygwinにcURLコマンドをインストールする手順 - Windowsと暮らす

インストールしないとdownload_iwslt15.shが実行できない

④mkdirのpath

ルートディレクトリ以外にフォルダを置いていたのではまった。

nmt/scripts/download_iwslt15.sh /tmp/nmt_data

のコマンドが 期待した通りに実行されず、そのままpython -m nmt.nmt (以下略)を走らせると

ValueError: vocab_file '/tmp/nmt_data/vocab.vi' does not exist.

が出る。

原因はmkdirコマンドでオプションの文頭にスラッシュがあると期待した動作をしない。

よってチュートリアルにあるコマンドはそのまま使えない。

 

変更前

nmt/scripts/download_iwslt15.sh /tmp/nmt_data

変更後

nmt/scripts/download_iwslt15.sh tmp/nmt_data

 

変更前

mkdir /tmp/nmt_model
python -m nmt.nmt \
--src=vi --tgt=en \
--vocab_prefix=/tmp/nmt_data/vocab \
--train_prefix=/tmp/nmt_data/train \
--dev_prefix=/tmp/nmt_data/tst2012 \
--test_prefix=/tmp/nmt_data/tst2013 \
--out_dir=/tmp/nmt_model \
--num_train_steps=12000 \
--steps_per_stats=100 \
--num_layers=2 \
--num_units=128 \
--dropout=0.2 \
--metrics=bleu

 

変更後

mkdir tmp/nmt_model -vp

python -m nmt.nmt --src=vi --tgt=en --vocab_prefix=tmp/nmt_data/vocab --train_prefix=tmp/nmt_data/train --dev_prefix=tmp/nmt_data/tst2012 --test_prefix=tmp/nmt_data/tst2013 --out_dir=tmp/nmt_model --num_train_steps=12000 --steps_per_stats=100 --num_layers=2 --num_units=128 --dropout=0.2 --metrics=bleu

 

⑤「UnicodeEncodeError: 'cp932' codec can't encode character~」というエラーが出る。

Windowsの標準出力の問題。CP932については

本当は怖くないCP932 - Qiita

Cygwin文字コード変換方法については

Cygwin 1.7.9 で日本語を使う

使っていた環境ではこれでうまくいかなかったのでPowerShellを使った。

PowerShellでは chcp 65001を叩くだけでUTF-8に切り替わる。