kerneltyu’s tech blog

理系学生です.

【メモ:本】Tensorflow活用ガイドのサンプルコードで躓いた時の対処

機械学習アプリケーション開発入門TensorFlow活用ガイドの4章 自然言語処理サンプルコードWindows上で動かそうとしたときに詰まった個所とその対処法について残します.4-3文書の分類のコードについてです.

環境

エラーとその対処

Traceback (most recent call last):
  File "classify\preprocess.py", line 164, in <module>
    exit(main(sys.argv[1:]))
  File "classify\preprocess.py", line 150, in main
    args.valid_samples
  File "C:\Users\kernel\Miniconda3\envs\tensorflow\lib\random.py", line 318, in sample
    raise ValueError("Sample larger than population or is negative")
ValueError: Sample larger than population or is negative

サンプルが適切じゃない旨のエラー,確認してみると,正しくデータを入力できていなかったみたいです.問題は54行目あたりのdata_generatorメソッドへの引数であるvalid.pathがすべてNaNになっているのが問題でした.さらに調べると

df.reindex([np.random.permutation(df.index)])

この命令後にdfの要素がすべてNaNになっていました.これは,以下のように変更することで改修できました.

df.reindex(np.random.permutation(df.index))

np.random.permutation(df.index)でndarray型が返ってくるにも関わらず多次元リストにして渡していたのが良くなかったみたいです.ここを直すと次は以下のようなエラーが返ってきました.

Traceback (most recent call last):
  File "classify\preprocess.py", line 165, in <module>
    exit(main(sys.argv[1:]))
  File "classify\preprocess.py", line 147, in main
    save_data(data_generator(train.path, train.label), train_output_path)
  File "classify\preprocess.py", line 67, in save_data
    for x, y in generator:
  File "classify\preprocess.py", line 57, in data_generator
    for line in i_:
UnicodeDecodeError: 'cp932' codec can't decode byte 0x81 in position 4: illegal multibyte sequence

うん,Windows特有のやつですね.Windowsはファイルを読み込むときに指定が無ければ,自動でcp932に変換されるらしいので,utf-8を指定してあげなければなりません.

qiita.com

data_generatorメソッド内のopenメソッドに指定がなかったので,以下のように修正.

with open(path, encoding=ENCODING) as i_:

これで無事に動きました.