日々精進

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

2016-10-01から1ヶ月間の記事一覧

EBSはAWSコンソールから拡張設定しただけでは拡張されない

AI

正しくはEBSのサイズは変わっているけどパーティションのサイズが変わってないので 使える容量は増えない。以下のコマンドを実行する必要がある。 sudo growpart /dev/xvda 1 sudo resize2fs /dev/xvda1 参考: qiita.com

ListのUnique

AI

以下のように一旦setにしてまたlistに戻せば良い。 list(set(ary)) 参考: note.nkmk.me

Kerasで浮動小数点数の精度を下げて効率を上げる

AI

精度はデフォルトで64bitだが、以下の本には16bitでもほとんど精度は落ちないと書いていたので精度を下げてみた。 ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装作者: 斎藤康毅出版社/メーカー: オライリージャパン発売日: 2016/0…

Kerasで複数GPUを使って学習する

AI

何もしなくても全GPUを使って学習してくれるかと思ってたけどそうではなかった。 以下のようにしてGPU数を渡してやると全GPUを使ってくれる。 def get_available_gpus(): local_device_protos = device_lib.list_local_devices() return [x.name for x in lo…

EC2インスタンスからインターネットに接続できない問題

IT

色々原因はあるだろうけど、今回はセキュリティグループもルートテーブルも正しく設定しているのになぜ。。 と思ったら、ルートテーブルの設定は反映されるまで多少時間がかかるっぽい。 ルートテーブルの設定変更から数分経ったら直った。 そんなことあるの…

GPU関連のコマンド

AI

GPU使用率を調べる。 nvidia-smi -l マシンについているGPUの情報を調べる。 lspci | grep -i nvidia 参考: qiita.com askubuntu.com

AWS Elastic Inferenceは全然Elasticじゃなかった

AI

Elastic Inferenceには以下の制約がある。 ・EC2一つに対して一つしかGPUをアタッチできない ・EC2起動時しかアタッチできない ・デタッチできない。使うのをやめる場合はインスタンスを終了しないといけない いや、普通にGPUインスタンス起動した方がいいで…

ログに「Created TensorFlow device・・・」が大量に出て実行に時間がかかる問題

AI

以下のログが大量に出る問題。 2019-02-27 10:46:30.637017: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 10758 MB memory) -> physical GPU (device: 0, nam…

AWSでDeep Learningの学習データをどこに保存するか

AI

最初はEBSに全部置いていたが、すぐに容量がいっぱいになってしまった。。 今のところ以下が良さそう。 データの原本・前処理結果・モデルはすべてS3に保存する 学習時にS3から学習データを取得する。その際インスタンスストアにキャッシュする。二回目以降…

AWSのインスタンスストアはEBSよりかなり速い

IT

インスタンスストアとEBSの違いがよくわかってなかったのでこんな違うと思わなかった。。 シーケンシャルリードで3倍程度の差がある。 EBSはネットワークストレージなので転送速度は低いようだ。 参考: dev.classmethod.jp

Linuxで容量の大きいフォルダを探す方法

IT

du --max-depth=7 /* | sort -n を実行すると大きい順にソートしてくれる。 いっぱい出てくるのでこんな感じでテストデータなどを置いてるフォルダだけに絞ってもいいかも。 du --max-depth=7 /* | grep work | sort -n 参考: serverfault.com

MNISTをダウンロードしようとすると「ConnectionResetError: [Errno 104] Connection reset by peer from sklearn.datasets import fetch_mldata」エラー

AI

ダウンロード先サーバが落ちてるのが原因らしい。 以下のようにしてキャッシュフォルダにMNISTを直接ダウンロードしてからfetch_mldataを実行すると直る。 cd ~/scikit_learn_data/mldata wget https://github.com/amplab/datascience-sp14/blob/master/lab7…

cv2.cvtColorで「Unsupported depth of input image:」'VDepth::contains(depth)' where 'depth' is 6 (CV_64F)エラー

AI

原因はndarrayのdtypeがfloatになっていることだった。 ary.astype(np.uint8)を使ってuint8に変換すると直った。 参考: stackoverflow.com

Kerasで「TypeError: _init_subclassed_network() got an unexpected keyword argument 'input'」エラー

AI

原因はModelのコンストラクタの引数名にinputを使っていることだった。ver2からinputsになったので、ver1のサンプルコードをコピペしてver2の環境で動かすとこういうエラーになる。 参考: github.com

Kerasでfitしているときに表示されるlossの値とmodel.evaluate(x, y)のlossの値が異なる理由

AI

理由は以下。なるほど。。 fitで計算しているlossはミニバッチ単位でのlossで、evaluateは全学習データに対するlossだから Dropoutレイヤは学習時のみ動作するため 参考: stackoverflow.com github.com

Kerasでmodel.summary()を実行すると「ValueError: This model has never been called, thus its weights have not yet been created, so no summary can be displayed. Build the model first (e.g. by calling it on some data).」エラー

AI

原因はinputレイヤが定義されていないこと。 以下のような感じでInputレイヤを定義すると直った。 model.add(Flatten(input_shape=(299, 299, 3))) 一番最初のレイヤをDenseからFlattenにした時にinput_shape引数も移さないといけなかったのが漏れてた。。 …

bytesオブジェクトをstrに変換するとb'...'となってしまう

AI

以下のようにstr()にただbytesを渡すとb'aaa'という文字列になってしまう。 b = b'aaa' str(b) encodingを指定するとaaaという文字列になる。 b = b'aaa' str(b, encoding='utf-8') この仕様は何なんだ。。 参考: qiita.com

json.dumps(dic)を実行すると「json.dumps typeerror object of type 'bytes' is not json serializable」エラー

AI

原因はdictの中にbytes型オブジェクトが含まれているため。以下のようにしてstrにしてから渡すと直った。 dic["key"] = str(bytes_item) 参考: stackoverflow.com

tensorflow.python.keras.applications.inception_resnet_v2などを使って転移学習する場合は、tensorflow.python.keras.applications.inception_resnet_v2.preprocess_inputを使って前処理する

AI

転移学習する場合、base modelの重みは固定することが多いということもあり、 base modelの学習時と同じ前処理を時前の学習データにもすべき。 tensorflow.python.keras.applications.inception_resnet_v2.preprocess_input のように、各base modelのモジュ…

Data Augmentationにはimgaugを使うと便利

AI

クラスメソッドさんがいい記事を書いているのでこれを参考にやってみるといいと思います。 dev.classmethod.jp ランダムに色んな効果を適用したい時に便利。 github.com pip install imgaugで入れるとscikit-imageがバグってるバージョンが入ってエラーにな…

ubuntuでは再起動すると/tmp下が全部消える

AI

PyCharmはデフォルトで/tmp下にフォルダを作ってそこにソースコードを置くので EC2インスタンスを再起動したら消えててびっくりした。 /home/ubuntu下に置くか。。 参考: askubuntu.com

SSHで接続すると「ssh_exchange_identification: Connection closed by remote host」エラー

AI

原因はIPアドレスが間違っていることだった。なんと初歩的な。。 参考: qiita.com

Tensor flowのTensorオブジェクトをndarrayに変換する

AI

以下のようにSessionを開始してTensor.eval()を実行すればいい。 sess = tf.Session() with sess.as_default(): X_train_color = X_train_tensor.eval() X_test_color = X_test_tensor.eval() X_valid_color = X_valid_tensor.eval() Tensor flowのresizeな…

keras/Tensor flowで学習処理を実行すると「tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'input_3' with dtype float and shape [?,299,299,3]」エラー

AI

原因というか、何が悪いかはよく分からないがTensorBoardの引数の histogram_freq=1 を histogram_freq=0 にすると直った。 TensorBoardかTensor flowかKerasのバグかな。。 エラーメッセージからこの解決策に全然たどり着けず、結構ハマッた。。 以下のIssu…

S3から正規表現に一致するファイルをすべてダウンロードする

AI

boto3に普通にありそうな機能だけど見付からなかったので実装。 def download_object_from_s3(remote_path: str) -> io.BytesIO: """S3からオブジェクトをダウンロードしてreturnする Args: remote_path (str): ダウンロード元のS3のパス Returns: S3からダ…

io.BytesIOをstrに変換する

AI

self.contentがio.BytesIOオブジェクトとすると以下のようなコードで変換出来る。 def get_content_str(self) -> str: content_str: str = self.content.read().decode('UTF-8') self.content.seek(0) return content_str readするたびにseek(0)しないといけ…

imgaugを使ってData Augmentationしようとすると「ImportError: cannot import name '_validate_lengths'」エラー その2

AI

以下の記事でnumpyのバージョンを1.15.4にすると直ると書いたけど、numpyのバージョンを変えるとTensor flowのバージョンも変えないといけないのでやっぱりやりたくない。。 anton0825.hatenablog.com 原因はscikit-imageのバグ。0.14.1がバグってるので0.14…

imgaugを使おうとすると「ImportError: cannot import name '_validate_lengths'」エラー

AI

原因はimgaugが依存しているscikit-imageのバグ。 numpyのバージョンを1.15.4にすれば一旦回避できる。 importの名前が間違ってるバージョンをリリースするとかあり得ないでしょ。。 参考: github.com github.com

WSLやPuttyからサーバにsshでログインし、トンネル掘っているのにトンネル経由でログインするツール類(WinSCPとか)はログイン出来ない

AI

WinSCPなどでPagentを使って認証するよう設定しているがPagentが起動されていないことが原因だった。。 Windowsを再起動したらPagentが起動されてない状態になり、認証に失敗してた。 Pagentを起動するか、Pagentを使わずに認証するよう設定することで直った…

VGG16の転移学習

AI

fit前までは以下のようなコードでOK。Sequentialにlayer渡して後続のnetworkを定義出来るのは便利だなぁ。 最初にaddするlayerはDenseに繋げるためにFlattenにしている。 base_model = tf.keras.applications.vgg16.VGG16(weights='imagenet', include_top=F…