日々精進

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

AI

PyCharmのPylintプラグインを実行すると「Pylint Plugin No Python interpreter configured for the project.」エラー

AI

残念ながらこの不具合は対応されていない。。 github.com しょうが無いので以下を参考に外部ツールとしてpylintを使う方法を試してみるか。。 stackoverflow.com

PyCharmを閉じると真っ黒なウィンドウが残る

AI

これはPyCharmのバグで2020.1バージョンで直るらしいのでそれまで待ちましょう。 参考: https://youtrack.jetbrains.com/issue/IDEA-205849?_ga=2.263696844.1358834143.1579589620-1975443277.1563440688

PyCharmでSSH Interpreterを使っている時に、リモートサーバにconda installなどでインストールしたパッケージをPyCharmに取り込む方法

AI

PyCharmのSSH Interpreterは大変便利だけど、サーバ側でconda installした後、PyCharmにそれが伝わらず IDE上でinstallしたpackageがそんなパッケージないとエラーになったり補完が効かなかったりする。 そういうときはInvalidate Cache / Restart...を実行…

テーブルデータの各カラムの欠損率を表示する

AI

EDAやってて欠損率の高いカラムを除去したい場合などに便利。 null_count = dataset.isnull().sum() null_rate = null_count / len(dataset) null_table = pandas.DataFrame({ 'null_couunt': null_count, 'null_rate': null_rate }) null_table.sort_values…

LightGBMで「ValueError: y contains previously unseen labels」エラー

AI

原因はValidation setの中に、正解ラベルの一部が含まれてなかったため。 通常は十分なデータ量があるのでそんなことないと思うが、動作確認のためデータの一部を使って学習している場合に発生しそう。

PyCharmのSSH InterpreterのFile Transfer機能が正しく動かない問題

AI

PyCharmのSSH Interpreterは手元のPCでコードを書いて、実行はリモートのEC2インスタンスなどで実行できる、しかも実行前に自動的にコードをアップロードしてくれる という大変便利な機能だけど、その実行前にコードをアップロードする機能が頻繁に動かなく…

機械学習モデルの予測結果を説明する方法

AI

最近、機械学習モデルの予測結果を説明する手法が話題になっているので いくつか調べてみた。 Azureには予測結果を説明する機能がある。テーブルデータを説明する場合はSHAPを使うのが一般的っぽい。 SHAPの実行結果をどうグラフに表示するかは参考になりそ…

hackingでpythonのLintをすると誤ってwarningになる箇所がある

AI

2つのエラーが誤って検出された。 E701 multiple statements on one line (colon) は古いバージョンのpycodestyleに不具合があり、誤って検出されるっぽい。flake8/hackingは内部的にpycodestyleを使っている。 stackoverflow.com 以下を見ると既に修正版が…

GPU使用率をwatchする

AI

nvidia-smi -l で定期的にwatchできる。他にも色々オプションがあるけど基本使うのは-lだなぁ。 参考: qiita.com

tensorflowでの学習がhangする

AI

この現象はGPUが複数ある環境でのみ発生する。 学習が終わるタイミングで処理が止まってしまい、プロセスも終了することなく残る。 原因はtensorflowのバグっぽい。Issueでも似た現象が報告されているが、解決していない。(ちょっと違う現象なので別原因か…

TFRecordDatasetにS3のパスを渡すと「Encountered Unknown AWSError」が出る

AI

S3からデータを読み込む時に以下のログが出る。 2019-11-18 11:36:44.626135: W tensorflow/core/platform/s3/aws_logging.cc:57] Encountered Unknown AWSError InvalidRange The requested range is not satisfiable: 2019-11-18 11:36:44.626177: W tenso…

Pycharmでplt.show()を実行しても図が表示されない

AI

前はIDE上で図が見えたんだけど、なぜか何も表示されなくなった。。 import matplotlib matplotlib.use('TkAgg') をmatplotlibをimportする前に実行すると表示されるようになった。けど、別窓で表示されるのでちょっと不便。 参考: teratail.com

Pythonのre.matchは先頭一致

AI

他の言語では部分一致になることが多いと思うが。。 部分一致にしたい場合はre.searchを使う。 参考: note.nkmk.me

boto3のlist_objects_v2は最大1000オブジェクトまでしか取得出来ない

AI

1001以上取得したい場合はループを回す必要がある。例は以下。 def list_all_contents(self, prefix: str = ''): next_token = '' base_kwargs = { 'Bucket': self.bucket_name, 'Prefix': prefix, } all_contents: List[dict] = [] while next_token is not…

pythonでメソッドの実引数に**を付けるとdictを展開してくれる

AI

これ知らなかった。。コードを見た方がわかりやすいと思う。例は以下。 >>> def parrot(voltage, state='a stiff', action='voom'): ... print("-- This parrot wouldn't", action, end=' ') ... print("if you put", voltage, "volts through it.", end=' '…

boto3を使って、S3オブジェクトをメモリにロードする

AI

ファイルに保存したくない、と言う場合、以下のようにかく。 s3_client = boto3.client('s3') s3_response_object = s3_client.get_object(Bucket=BUCKET_NAME_STRING, Key=FILE_NAME_STRING) object_content = s3_response_object['Body'].read() 参考: st…

TensorFlowにS3のパスを渡すと読み込んでくれる

AI

dataset = tf.data.TFRecordDataset(filenames=s3_paths, num_parallel_reads=num_parallel_calls) のように、S3オブジェクトのパス(s3://~)を渡すと、TF側でS3からデータをダウンロードしてくれる。便利。 参考: github.com tensorflow.classcat.com

PyCharmのSSH Interpreterからconda環境を使う

AI

EC2サーバ上でプログラムを実行したい、その時に、tensorflow_p36仮想環境で実行したい。実行はPyCharmから行いたいという場合。 Configure Remote Python InterpreterウィンドウのPython Interpreter pathに以下のように、仮想環境のpython実行ファイルのパ…

正しいコード(実行出来る)なのにPyCharm上でunresolved reference errorが出る

AI

原因はわからないけど、Invalidate Cachesを実行すると直った。 参考: stackoverflow.com

Pythonスクリプトを実行すると「SyntaxError: Non-ASCII character '\xe5' in file spot_instance_creator.py on line 80, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details」や「TypeError: 'encoding' is an invalid keyword argument for this function」

AI

原因はスクリプトが開発された環境と実行環境のpythonのバージョンがずれていること。 python3用スクリプトをpython2で実行しているのがまずいので、python3を入れて実行したら直った。 しかし、 Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type がpytho…

p2インスタンスよりG4インスタンスの方がコスパがいいらしい

AI

最近出来たG4はp2よりいいらしいので最近はg4dn.xlargeを使って学習を回したりしている。 参考: aws.amazon.com

PyCharmからパッケージをインストールしようとすると「ERROR: Could not find a version that satisfies the requirement pandas (from versions: none)」のようなエラーになる

AI

proxyの問題と思うが、Available PackagesウィンドウのOptionsに--proxyオプションを設定しても直らなかった。 Anaconda Promptでpip installでインストールするとインストールできた。 PyCharmからインストールする場合はPATHの問題とかでインストールでき…

「ModuleNotFoundError: No module named 'sklearn.cross_validation'」エラー

AI

原因はコードが古いこと。cross_validationはmodel_selectionに移動したので from sklearn.model_selection import train_test_split のようにするのが正しい。 本のコードを写経していると発生しそう。。 参考: www.haya-programming.com

OpenCVのcvtColorを実行すると、「Unsupported depth of input image:」エラー

AI

原因はndarrayの型がuint8なことだった。float32に変換すると直った。 lab_image = cv.cvtColor(img.astype(np.float32), cv.COLOR_RGB2HSV) 参考: stackoverflow.com

OpenCVの色をHSVに変換した時の値とGIMPで調べたHSV値が異なる

AI

原因はOpenCVとGIMPで値の単位が異なるため。 OpenCV H: 0~180 これが一番びっくりした。。np.uint8の範囲に収めるために0~360°の範囲を半分にして0~180°にしてるんだろうけど。。 S,V:0~255 GIMP H:0~360 S,V:0~100 単位は%なので、OpenCVに合わせるなら25…

Pythonでリストの一部をfor loopを回しつつ削除する方法

AI

他の言語だと、loopのindexを最大値から減らしながらリストにアクセスし、いらない要素を消したりするが、 Pythonの場合はリスト内包表記とif文を使って新しいリストを生成するのが良いっぽい。 例えば、以下のような感じ。 somelist = [x for x in somelist…

PythonのEnumの名前を文字列で取得する

AI

Color.RED.nameのようにnameプロパティを呼ぶと、"RED"のように文字列で名前が取得出来る。 文字列で受け取った区分がどのEnumの値かを判別するときに使う。 参考: stackoverflow.com

JupyterNotebookにアクセスしようとすると、「channel 3: open failed: connect failed: Connection refuse」エラー

AI

再現手順は以下。 JupyterNotebookサーバを起動する JupyterNotebookサーバは外部公開されていないサーバなので、そのサーバへのSSHトンネルを掘る ブラウザに以下のようなURLをコピペしてJupyterNotebookを表示しようとすると、エラーが発生する http://loc…

学習データを集める時に差分プライバシーが使えそう

AI

AIは学習データをどれだけ集められるかが非常に重要だが、 個人情報などはプライバシー・セキュリティの問題で集めることが難しい。 そういう場合に差分プライバシーが使えそう。 アイデアとしては、個人を特定できないよう、各データにランダムなノイズを載…

Pythonで関数オブジェクトの型アノテーションをする

AI

Callableを使えば出来る。Callable[引数のリスト, 返値] という仕様になっている。例は以下。 multiply: Callable[[int, int], int] = lambda x, y: x * y 参考: qiita.com