【メモ:本】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を指定してあげなければなりません.
data_generatorメソッド内のopenメソッドに指定がなかったので,以下のように修正.
with open(path, encoding=ENCODING) as i_:
これで無事に動きました.