日々精進

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

「pycocotools/_mask.pyx ValueError: numpy.ndarray size changed, may indicate binary incompatibility.」エラー

原因はnumpyのバージョンが古いことで、1.20.1以上にすれば直るっぽいが TensorFlowが1.19.5に依存しているのでnumpyのバージョンを上げられない・・

stackoverflow.com

しょうがないのでpycocotoolsを使わずアノテーションファイルのparseを独自実装することにした。

SageMakerで学習をしている時のTensorBoardを表示する

Estimatorのinitにtensorboard_output_configという引数があるので、これを設定するとtensorboardのログをS3にアップロードしてくれそうだけど、してくれなかった。。 以下で同じ問題で困っている人がいるけど解決してないっぽい。

stackoverflow.com

しょうがないのでtensorboard callbackのlog_dirにS3のパスを指定してアップロードした。詳細は以下参照。

dev.classmethod.jp

SageMaker Studio上でTensorBoardを表示する手順は以下。

docs.aws.amazon.com

sshでアクセスすると公開鍵認証してほしいのにパスワードを聞かれる

ssh hostname -vvvTを実行すると以下のログが出る。

debug1: Trying private key: /c/Users/username/.ssh/mykey.pem
debug3: sign_and_send_pubkey: RSA SHA256:nQr29X+3juJvSWOedeEVmgKCZgaO169LKCvAZCKkFKM
debug3: sign_and_send_pubkey: signing using rsa-sha2-512 SHA256:nQr29X+3juJvSWOedeEVmgKCZgaO169LKCvAZCKkFKM
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password

「receive packet: type 51」はユーザの認証に失敗したという意味。 今回の原因は/home/username/.sshフォルダの権限が600になっていたため。正しくは700。 sshはほんとハマリやすい。。

tf.keras.load_modelでモデルを読み込むと「ValueError: Unknown loss function」エラー

学習時にcustom loss functionを使った場合、load時も同じ関数をcustom_objectとして渡してやらないといけないらしい。 ただ、再学習するのではなく推論するためにmodelをloadするのであれば以下のようにcompile=Falseを指定してやればOK。

model = load_model("lc_model.h5", compile=False)

参考:

stackoverflow.com