日々精進

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

AI

SSD MobileNetV3のpretrained modelはmodel zooにある

AI

SSD MobileNetV3のpretrained modelを探していたが、意外と見付からなくて困った。 最終的には以下にあったものを使った。 github.com MobileNetV3という名前のモデルにはImageNetで学習したもの(=物体検出モデルではなく、画像分類モデル)もあり、混乱し…

windows環境でimport mxnetを実行すると「OSError: [WinError 126] 指定されたモジュールが見つかりません。」エラー

AI

原因はMXNETのバグ。mxnet-mklの1.4.0には以下で報告されているバグがあり、このエラーが出ていた。 github.com pip install mxnet-mkl==1.5.0 を実行し、1.5.0をインストールすると直った。

TF-TRTとTRTではTRTの方が速い(恐らく)

AI

TensorRT周りは色々ややこしい。。 TensorFlowに組み込まれたTensorRTがあり、これをTF-TRTという。 TensorRT(TRT)はNVIDIAが開発している深層学習を高速に推論するためのライブラリ。 TF-TRTはTensorRTが対応している部分のみTensorRT化して推論する。 ここ…

VBAで編集距離を計算するマクロ

AI

以下で紹介されているコードを使って編集距離計算できました。ありがたい・・ stackoverflow.com

pythonスクリプトのプロファイルを取ると「_generate_unique_filename」がボトルネックになっていた

AI

_generate_unique_filenameって何だ・・・と思っていたら、これはattrパッケージの中で定義されている関数で、 クラス定義に@dataclassが付いていると呼ばれるっぽい。 pydoc.net 以下のようなクラス定義がforループの中にあって何度も呼ばれると_generate_u…

draw.rectangleで矩形を描画しようとすると「TypeError: function takes exactly 1 argument (3 given)」エラー

AI

以下のようなコードでbounding boxを描画しようとするとエラーになった。 img = Image.open(img_path) draw = ImageDraw.Draw(img) draw.rectangle((bbox[0][0], bbox[0][1], bbox[2][0], bbox[2][1]), outline=(255, 0, 0), width=2) 原因はImage.openで読…

PyCharmでコードブロックを折りたたむ

AI

以下のようにregionコメントを入れるとPyCharmのエディタ上でコードを折りたためる。 #region ~をするコード ... #endregion ホントはコードが長くなってきたら別モジュールに分けた方が良いんだろうけど、この方法でもコードを見やすくできる。 参考: [htt…

PyCharmで別プロジェクトをattachすると「The project at … uses a non-standard layout and cannot be attached to this project」エラー

AI

原因は不明だが、以下で直った。 ※「The project at … uses a non-standard layout and cannot be attached to this project」というメッセージがダイアログに表示されたら、一度Yesを選択し、 その後attachするとAttachできる。それでもだめな場合はPyCharm…

pythonプログラム起動時に「ValueError: Unable to configure handler 'fileHandler'」エラー

AI

原因はloggerの設定でfileHandlerを定義していたが、ログファイルの出力先フォルダが存在しないこと。 以下のように設定している場合、/home/ec2-user/m5/logフォルダがないとエラーになる。もっと原因がわかりやすいエラーメッセージにしてほしい。。 handl…

集計はlong formatよりwide formatの方が速い

AI

long formatとwide formatについては以下参照。 www.theanalysisfactor.com long formatのDataFrameに対して以下のように商品毎の日別売上合計を集計したところ、53秒かかった。 sums: DataFrame = train.groupby(["item_id", "date"])[SALES_COUNT].sum() …

Pandasで最頻値を計算する処理は非常に重い

AI

以下のように、移動平均などを計算しようとしたらすごく時間がかかっていたので速くしようとした時の話。 agg = sales[SALES_COUNT].astype("float32").shift(shift).rolling(window) \ .agg(["mean", "max", "min", "std", lambda x: x.mode()[0]]) \ .rese…

DataFrame.groupbyでcategory型の列を指定すると、データの中に存在しないカテゴリの集計結果も出力される

AI

状況は以下。 df = df.query("store_id == 'CA_1') # store_id はCA_1, CA_2などがある df.groupby('CA_1').sum() #=> dfにはCA_1しかないのにCA_2の集計結果の行もできてしまう 以下のようにobserved=Trueオプションを指定すると直る。この挙動をデフォルト…

pandasでmulti indexになっているときにindexの列で絞り込む

AI

以下のようにget_level_valuesメソッドでindexのうち一つの列を選択してmaskをかけられる。 mask: Series = self.features.index.get_level_values(1) == pred_date self.features.loc[mask, SALES_COUNT] = pred[PRED_SALES_COUNT] multi indexはほんとは扱…

pytestのassertはlist同士の比較もできる

AI

listの中の値をassertしたい場合でもassert ==で検査できる。配列やtupleが入れ子になっていても大丈夫。 assert actual == [1, 7, ["平均", "mean"]] 以下によるとunittestではTestCase.assertItemsEqualとか使わないといけないっぽい。pytestは楽だなあ。 …

DataFrameの処理を並列化すると非常に遅くなることがある

AI

例えば、以下のようにグループ毎に集計する処理の場合 sums: DataFrame = train.groupby(ids)[SALES_COUNT].sum() 以下のようにするとグループ単位で並列化できるので速くなりそうに思える。 def func(df): return df[SALES_COUNT].sum() ret_list: List = P…

DataFrame.locで複数列を一度に代入できない

AI

以下のようなコードで、あるDataFrameの4つの列に別のDataFrameの値を代入しようとしたが、できなかった(代入してもsalesの値がNaNのまま) sales.loc[mask, [SALES_COUNT_MA14, SALES_COUNT_MMAX14, SALES_COUNT_MMIN14, SALES_COUNT_MS14, SALES_COUNT_MM…

docker runを実行すると「ERROR: for Cannot start service : OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \"process_linux.go:385: running prestart hook 1 caused \\\"error running h

AI

原因はGPUの無いマシンでdocker-compose.yamlに runtime:nvidia と書いた状態でコンテナを起動しようとしたことだった。 runtime:nvidia を削除すると直った。

PythonでPath.mkdirを実行すると「UnicodeEncodeError: 'ascii' codec can't encode character」エラー

AI

原因はmkdirの中でOSのデフォルトエンコーディングに従ってmkdirに渡したpath文字列をエンコードしているため。 CPython実装を見ると、Py_FileSystemDefaultEncodingに従ってエンコードしているように見える。 cpython: 54c93e0fe79b Modules/posixmodule.c …

DataFrameのgroupbyして集計する処理を並列化すると10倍速くなった

AI

コア数が20あるCPUでシングルプロセスで処理していたのをマルチプロセスにしたところ10倍速くなってビックリした。 やり方も簡単で、以下のようにgroup毎に集計する処理を並列化するだけでいい。これは便利。 def aggregate(sales: DataFrame, window: int):…

pythonプログラムを実行すると「Process finished with exit code 137」エラー

AI

原因はOut of memoryだった。使うメモリ量を減らさないといけないんだけど、苦戦中。。 参考: stackoverflow.com

DataFrameでgroupbyして移動平均等の統計量を計算する

AI

売上の移動平均・最大・最小・標準偏差・最頻値を計算したい場合のコードは以下。以外と手こずった。。 return sales.groupby([STORE_ID, ITEM_ID])[SALES_COUNT_LAG_1].rolling(window)\ .agg(["mean", "max", "min", "std", lambda x: x.mode()[0]]) \ .re…

PandasのDataFrameのIndexのrenameをする方法

AI

single indexの場合は df.set_index("seq_idx") でいい。 multi indexの場合は一度reset_indexしないといけない。

pandasの永続化フォーマットはpickleがいい

AI

永続化フォーマットとして今までparquetを使っていたが、float16に対応していなかったりして困ったのでフォーマットを変えることにした。 github.com 以下によるとpickleが良さそう。こういう検証は有り難い。。 blog.amedama.jp

pandasで移動平均を計算すると「ValueError: cannot convert to 'float64'-dtype NumPy array with missing values. Specify an appropriate 'na_value' for this dtype.」エラー

AI

以下のようなコードで移動平均を出そうとしたところ、「ValueError: cannot convert to 'float64'-dtype NumPy array with missing values. Specify an appropriate 'na_value' for this dtype.」エラーが発生した。 return sales.groupby([STORE_ID, ITEM_I…

JupyterLab2.1を入れてdebuggerを使おうと思ったが、色々制約があるのでやめた話

AI

www.publickey1.jp この記事をみてワクワクしながらJupyterLab2.1とdebuggerを入れてみたが・・以下の理由で使うのを断念した。 debuggerを使うにはxeus-python kernelを使わないといけないが、これはmagic commandに対応していない。 使っているextensionが…

JupyterLab ExtensionをDockerfileでinstallする

AI

JupyterLab Extensionはpythonパッケージのようにenvironment.yamlからinstallできない。 extensionの実体はnpmパッケージなのでpackage.jsonからinstallできたらいいのだが、 そのような方法は見付からなかった。 今のところ以下のように一つずつextension…

JupyterLabのExtensionManagerタブに「Error communicating with server extension.」と表示される

AI

原因はnodejsが正しくインストールできていないことだった。 Dockerfile内でnvmをinstallし、さらにnodejsをinstallしていたが、 root userに対してインストールしていたので通常使うuserからはnodejsが実行出来ない状態だった。 通常使うuserにsuしてからno…

Pythonでstr⇒boolに変換

AI

以下のようにbool()とstrtobool()を組み合わせるとbool型に変換できる。 bool(strtobool("true")) bool()も使わないといけないのは紛らわしいことにstrtoboolはboolでなくintを返すから。なんだこの仕様。。 参考: qiita.com

matplotlibの単体テスト

AI

pytest-mpl を使うとmatplotlibで生成した画像と期待結果画像を比較して違っていたらエラーにできる。 matplotlibを便利に使うためのクラスを作っているので助かる。 参考: github.com

PyTorchを実行すると「ctdet/coco_res18THCudaCheck FAIL file=/opt/conda/conda-bld/pytorch_1535491974311/work/aten/src/THC/THCGeneral.cpp line=663 error=11 : invalid argument」エラー

AI

PyTorchのバージョンが古いと発生するらしい。使っていたバージョンは0.4.0。 以下サイトでinstallコマンドがわかるので、これを実行して最新版をインストールしたら直った。 pytorch.org 参考: discuss.pytorch.org discuss.pytorch.org