日々精進

新しく学んだことを書き留めていきます

AI

ndarrayをテキストで保存する

AI

JSONで保存したい場合は以下のようにEncoderを定義する必要がある。 class NumpyEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, numpy.integer): return int(obj) elif isinstance(obj, numpy.floating): return float(obj) elif i…

pythonで特定のDirectoryのファイルをすべて処理する

AI

以下のようにos.listdirを使うとできる。 for f in os.listdir(f"{ROOT_PATH}/test/data"): print(f) 参考: stackoverflow.com

WindowsのPyCharmで改行コードをLFにする

AI

PyCharmはWindows環境ではデフォルトで改行コードCRLFを使うが、 ファイルをサーバにアップロードして実行する場合、エラーが起きてしまう。 なので改行コードをLFにしたい。その方法は以下。Macで開発してればこんなことないのに。。 www.jetbrains.com

JupyterNotebookで「ValueError: attempted relative import beyond top-level package jupyter」エラー

AI

原因は上の階層のPythonファイルをImportできないため。多分セキュリティ上の理由でそういう仕様になっている。 しょうが無いのでJupyterNotebookファイルのサブフォルダに読み込むPythonファイルを配置した。 参考: stackoverflow.com

pandas.DataFrame.histで表示するヒストグラムを大きくする

AI

DataFrame.histを実行しただけだと、グラフちっさ!となるので以下のようにすると大きくなる。 fig = plt.figure(figsize = (15,20)) ax = fig.gca() train.hist(ax = ax) 参考: stackoverflow.com

pandasでランダムに行をsamplingする

AI

DataFrame.sampleでできる。 以下の記事では、x.ix[random.sample(x.index, n)] とすると最初の回答に書いてあるが 今はDataFrameがsampleをサポートしているのでこっちを使った方が良いっぽい。 二番目の回答に書いてあるけど、見落としそう。。 参考: sta…

sklearn.model_selection.cross_val_scoreのスコア計算方法

AI

色々あるのでタスクに応じて適切なものを選ぶこと。 scikit-learn.org 上記が公式ドキュメントだけど、なぜか社内からscikit-learnのサイトが表示出来ない。。ので以下を見ながら書いてます。不便。 qiita.com

LightGBMにはnative apiとscikit-learn apiがある

AI

scikit-learn apiはnative apiのWrapper。メリデメは以下。 scikit-learn apiのメリット scikit-learnのツールが使える。(Pipeline、cross_val_scoreなど) scikit-learnの各アルゴリズムとIFが揃うので、アルゴリズムの取り替えが容易。これによってアンサ…

LightGBMでどの特徴量がカテゴリ変数かを指定する

AI

LightGBMにpd.DataFrameを渡す場合、SeriesのdtypeがcategoryだったらLightGBMもカテゴリ変数として扱ってくれる。 なので、前処理の時に以下のようにしてdtypeを変換するとよい。 train["Pclass"] = orig_train["Pclass"].astype("category") 参考: blog.a…

PandasでFeatherファイルを読み込むと「TypeError: read_feather() got an unexpected keyword argument 'nthreads'」エラー

AI

pyarrowのバージョンの問題らしく、古いバージョンのpyarrowでは問題ないらしい。 解決策は feather.read_dataframe を使ってファイルを読み込むこと。 import feather df_raw = feather.read_dataframe('tmp/bulldozers-raw') 参考: forums.fast.ai

Feather形式でファイルを保存する時に「pyarrow.lib.ArrowNotImplementedError: halffloat」エラー

AI

原因はFeatherが裏で使っているParquetが半精度浮動小数点に対応していないため。 しょうが無いのでfloat32を使うよう修正した。 参考: github.com

「DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in future this will result in an error. Use `array.size > 0` to check that an array is not empty.」エラー

AI

原因は以下。 ・cross_val_score関数の内部に以下のコードがあり、想定外のクラス(カテゴリ)がないかをチェックしている。 ・その際、想定外のクラスが無ければdiffが空のndarrayになる。if diff: のところはndarrayが空の場合Falseと判定されることを利用…

pandasでcsvを読み込むときは型を指定する

AI

型を指定しないと、int64などの大きい型になりメモリを食うため。 Titanicのデータセットで実験した結果は以下。 型指定なし <class 'pandas.core.frame.DataFrame'> RangeIndex: 891 entries, 0 to 890 Data columns (total 12 columns): PassengerId 891 non-null int64 Survived 891 non-null i</class>…

JupyterNotebookをパスワードなしでログイン出来るようにする

AI

以下のようにオプションを渡すとパスワードを聞かれなくなる。 jupyter notebook --ip='*' --NotebookApp.token='' --NotebookApp.password='' 参考: stackoverflow.com

PythonでJISコードを文字に変換すると意図した文字にならない

AI

↓の文字コード表では、JISコードの0x2422は「あ」という文字に対応している。 ash.jp 以下によると、JISコードとは「ISO-2022-JP」の別名 ja.wikipedia.org 以下によると、「ISO-2022-JP」に変換するにはiso2022_jpを指定すればいいように見える。 docs.pyth…

ABCIは超安い機械学習環境

AI

ABCIは機能的には劣化版EC2のような感じのクラウド環境。 料金はEC2の同等インスタンスを比べて1/6ぐらいっぽいのですごい安い。 とにかく安く計算回したい場合はアリかもなぁ。後は物理マシンを買う場合と比較してどうか。 参考: abci.ai

TensorFlowを実行すると「ImportError: /home/ec2-user/.conda/envs/p36/lib/python3.6/site-packages/google/protobuf/pyext/_message.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZNK6google8protobuf10TextFormat17FieldValuePrinter9PrintBoolB5cxx11Eb」エラー

AI

原因は詳しくは不明だが、以下を実行してlibprotobufをインストールすると直った。 conda install libprotobuf 参考: github.com

GPUでTensorFlowを実行出来るDockerコンテナを作る

AI

基本は以下の記事に書いてあるDockerfileで大丈夫だが、このままだとGPUが使えないという問題がある。 anton0825.hatenablog.com GPUを使えるようにするにはベースイメージのところを FROM nvidia/cuda:9.0-base-centos7 に変更する。 このとき、cuda9.0のba…

arXivの論文をGoogle翻訳して読む方法

AI

Google翻訳にはPDFは1MBまでという制約があり、論文を翻訳できず困っていたが Arxiv Vanityを使うとHTMLに変換してくれるのでGoogle翻訳が使えるようになる。これは便利。 参考: qiita.com

PyCharmで「Cython extension speeds up Python debugging」が出てextensionをインストールしようとしたらエラーになる

AI

Cコンパイラをインストールしないといけないが、PyCharmからインストールできなくて 別途自分でダウンロード・インストールする必要がある。手順は以下。めんどい。。 www.python.jp

Pythonのモジュール検索パスを確認する

AI

No Moduleエラーが発生したときに、パスが通ってないのが原因なんだろうけど、 正しく設定しているはず・・ということがある。設定されているパスを確認する方法は以下。 import sys import pprint pprint.pprint(sys.path) これで確認したらパスの設定が1階…

CentOSでOpenCVを動かすためにインストールするネイティブライブラリ

AI

ImportError: libSM.so.6: cannot open shared object file: No such file or directory とかのエラーメッセージが出た時の対処法。 yum install libSM を実行してもそんなパッケージないよと言われる。 yum search libSM でパッケージを探すとめっちゃいっ…

Deep LearningやるならNVIDIA RTX 2080 Tiが良さそう

AI

Tesla V100などDeep Learning用GPUは100万ぐらいするのでゲーミングGPUよりずっと性能高いんだろうなと思ってたけど 以下の記事によると意外と差が無かった。 gigazine.net RTX 2080 Tiすごいお得じゃん。。Deep Learning用物理マシンを買うならRTX 2080 Ti…

Flaskで開発サーバを起動する場合はflask_script.Managerを使うといい

AI

開発時にflaskサーバを起動する方法はいくつかある。例えば、 ・Flaskサーバのデバッグ構成を作成してそれを実行する pleiades.io ・flask cli経由で起動する。つまり、flask runを実行しデバッガはpython Remote Debug構成を作ってサーバ起動後にattachする…

Pythonでディレクトリを丸ごとS3にアップロードする

AI

boto3にディレクトリをアップロードする機能はないのでaws cliでやらないといけない。 os.system(f"aws s3 cp ./home/ec2-user/dirname s3://bucket/dirname --recursive") のような感じでrecursiveオプションをつければいいのだが リモート側もまるっとコピ…

KerasでもDatasetAPIを使って効率的にtrain/validationデータを読み込む方法

AI

TFRecordファイルを読み込んでfitメソッドに渡そうと思ったんだけど、これがなかなか情報がなく苦労した。。 TFRecordを読み込んでfitメソッドに渡すところは以下のGistを参考にしてできた。 Training Keras model with tf.data · GitHub InputLayerやcompil…

TensorFlowのTFRecordファイルの中身を確認する方法

AI

作成したTFRecordが想定通りのフォーマットで作られているかを確認したい場合。 tf.data.TFRecordDataset([filepath]) で読み込むと、多分データが必要になるまで読み込まないようになるのでデータを確認出来ず困る(tf.Session()でSessionを開始してsess.ru…

tf.stackとtf.parallel_stackの違い

AI

parallel_stackの方が引数の計算がまだ終わってない時にstackできるので速いが backpropagationができないという問題がある。 参考: www.tensorflow.org

画像のData Augmentationをする上での知見

AI

Augmentationを実行するコードは関数にして、以下のパターンで呼び出せるようにする Augmentationした画像をjpgファイルとして保存する。 これはAugmentation結果が想定通りかを確認するために使用する。 学習時に動的にAugmentationする。kerasならfitでな…

git fetchすると「error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol」または「error:1408F10B:SSL routines:ssl3_get_record:wrong version number」エラー

AI

最初は error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol というエラーが出ていたが、gitを再インストールしたら error:1408F10B:SSL routines:ssl3_get_record:wrong version number に変わった。 原因はremoteリポジトリが社内にある…