Lastig

初級Web系エンジニアの技術系とかもろもろのブログ

【エラーと解決策】ModuleNotFoundError: No module named 'RPi'

エラー

Traceback (most recent call last):
File "/home/pi/xxx/xxxx.py", line xx, in
import RPi.GPIO as GPIO
ModuleNotFoundError: No module named 'RPi'

対処コマンド

sudo pip3 install RPi.GPIO

※「RPi.GPIO」というモジュール名は大文字/小文字区別ありなので、注意!

DeepLearning fastai #Lesson3 OVERFITTING ②後半(lesson2-image_models.ipynb) 感想とか

Lesson3の動画を見た感想とか。前回の更新からちょっと間が空いてしまった。
これまたLesson3で取り上げているのはlesson2-image_models.ipynbなのでちょっと変なタイトルになっている。
lesson3-rossman.ipynbは講義の最後20分間ぐらいなので、別記事で取り上げる。

Lesson3のテーマ



・画像から特徴を取り出す計算の解説 (※Excel)
・Multi-Label Classification (複数ラベル分類)
・2種類のloss関数の特徴 (ソフトマックス関数, シグモイド関数)

DL用語


用語 意味
CNN convolutional neural networks, 畳み込みニューラルネットワーク

英単語


英語 意味 再生時間
side on photos 並んだ画像 -
primary 惑星? -
vertical flips 上下反転 -
vertical orientation 垂直方向 -
replicate 複製する -
spit out 吐き出す 1:14:26
anthropomorphize 擬人化する 1:22:25
enumeration 目録、一覧表 1:24:45
dihedral group 2面体群 1:24:52
leverage 活用する 1:27:26
logistic regression ロジスティック回帰 。。。ってなに?(*´Д`) 1:47らへん
artisanal 職人の、技工の 1:54:05
tributary 支流の 1:54:19
terminology 専門用語 2:01:01

primaryって一番重要とかそんなイメージしかなかったぜ。

fastai関数/変数とか


関数/変数 使用例 意味 再生時間
bn_freeze learn.bn_freeze(true) unfreeze後にこれをしないと、バッチが正規化されてしまうらしい。詳しくは後の講義で教えてくれるとさ。 -
denorm - denormalizationの略、非正規化。 -
data.val_dl x,y = next(iter(data.val_dl)) Validation DataSet Loader dlはData Loaderの意味。Deep Learningではない 1:25:52

活性化関数 (ソフトマックス, エントロピー)



※conv-example.xlsxの内容は長くなりそうなので、別記事にまとめることにした。

f:id:lazycat99:20190127173224p:plain

ソフトマックス関数

・各値は0~1の値で返し、各値の合計が1になる。
→なので結果が確率として扱える
・飛び出た値を1に近い値として抽出できる。
理論上必ずしも必要ではないが、使うと処理を単純にできる有能な関数。

ただし複数のラベルをつける(multi-label classification)という処理には向かない。
なぜなら、複数のラベルに一致するなら、実際の値(actual)の合計は2以上になる。
だが、softmax関数は合計を1で返すので当然一致しない。

f:id:lazycat99:20190127182714p:plain

ということでLesson2のノートブックの話につながる。

Multi-Label Classification



以下Multi-Label Classificationを複数ラベル分類と僕は名づける。

複数ラベル分類では、今まで習ってきたフォルダごとに画像を分けるというやりかたはできない。一枚の画像に複数のラベルがつくと、どのフォルダに画像を分類すればいいかわからないから。なのでCSVにラベルをつける。

こんな感じ。
f:id:lazycat99:20190127180102p:plain
hot encodeされたacutual valueとsoftmax関数の返す値を比較して、どれくらい差があるか見る
PyTorchの場合は別のloss関数が使われるが、fastai上は隠されているので気にしなくていい。

Metrics / F Beta

負の値を許容するかどうか設定する話。。。なのか?
metricsはカスタマイズできることは抑えておくようにといっている。
ここはまだよくわかってない。
f:id:lazycat99:20190127182005p:plain

シグモイド関数

シグモイド関数は以下の式だ。
fn(x) = e^x / (1 + e^x)
なので0 ~ 1の値をとる。
f:id:lazycat99:20190127183920p:plain
ソフトマックス関数との違いは、

関数 特徴
ソフトマックス 個々の値の合計が1になる
シグモイド 個々の値が0~1の値をとる。もちろん合計は1より大きくなる場合もある

こいつを使ってやれば、複数ラベル付けが可能になる。

ハマったところ



そのまま実行するとtest-jpgがないと言われ、動かない。うそでしょ
f:id:lazycat99:20190102225143p:plain
error1

フォーラムをググると下記のコードを上から4番目のセルに追加すると直るらしいので、追加する。これで動く。
!ln -s /datasets/kaggle/planet-understanding-the-amazon-from-space/test-jpg {PATH}

f:id:lazycat99:20190102231005p:plain

感想

画像を数値として扱うロジックと、ソフトマックス関数とシグモイド関数の特徴を学んだのが収穫。
生徒の質問はまだ半分ぐらいしかわからない。
講義の内容は4分の1ぐらいしかわかってないけど、面白くなってきている。
記事書きながら講義受けるのもちょっと慣れてきた気がする。

講義に関するリンク



・講義
https://course.fast.ai/lessons/lesson3.htmlcourse.fast.ai
Youtube
www.youtube.com
・フォーラム
forums.fast.ai

・講義中の参考ページ http://neuralnetworksanddeeplearning.com/chap4 (1:13:29)
neuralnetworksanddeeplearning.com

【Heroku/Django】【エラー解決】Server Error (500) 設定ファイル(settings.py, wsgi.py, ...)をいじっても原因がわからない場合

エラーにいたる経緯、試したこと



・herokuにDjangoアプリを置いて、開発していたら突然Server Error 500で動かなくなった。
・settings.py, wsgi.pyに問題があるのかと思ったが、問題なし。関係ありそうな設定をいじっても動かない。

原因



・herokuにDEBUG=Trueで一度上げてしまった。
一度でもDEBUG=Trueで上げると、Falseに直しても回復しないのがハマった原因。

対策



・herokuアプリを作り直す。
→ちょっと面倒くさいけどgitのソースさえあれば、ちゃちゃっとできる。
Debug=Falseで上げると何事もなかったかのように動きやがるのだ。

※動かない旧アプリはすぐには消さずに、残しましょう。add-onとかbuildpackに何を追加したか確認できるので。

・.gitignoreにlocal_settings.pyが入っていることを確認する。
→色々あって.gitignoreを初期化してしまった。。。

補足



原因調査中に、herokuに上がっているsetting.pyの値を確認したくなった。

下記でheroku上のappに入れる

$ heroku run bash

あとはcatとかで中身を確認。viとかで編集はできないっぽい。

$ cat mysite/settings.py

参考



herokuへのアップは下記リンクが秀逸です。
qiita.com

【Ubuntu/Wine】A5M2を導入する手順メモ (【解決】wine: cannot find L"C:\\windows\\system32\\A5M2.exe")

A5M2めっちゃ便利なので、Ubuntuにも入れたくなった。そのときのメモ。

バージョン


Ubuntu 18.04.1 LTS (Bionic Beaver)
wine wine-3.0 (Ubuntu 3.0-1ubuntu1)

確認コマンド
ubuntu

$ cat /etc/os-release

wine

$ wine --version

手順



1. wineをインストール

$ sudo apt-get install wine


2. WebからA5M2のzipをインストール、解凍
www.vector.co.jp

3. A5M2起動しようとする。。。

$ wine A5M2.exe &


エラー発生。A5M2が見つからないってさ。

wine: cannot find L"C:\\windows\\system32\\A5M2.exe"


4. wineのアプリケーション内にA5M2.exeがあるか確認する

$ ls ~/.wine/drive_c/windows/system32 | grep A5M2.exe

確かにA5M2.exeがなかった。

※下記のパスにwine上で動くwindowsアプリが入る

~/.wine/drive_c/windows/system32


5. A5M2.exeを~/.wine/drive_c/windows/system32に追加。

$ cp [Zipを解凍したフォルダパス]/A5M2.exe ~/.wine/drive_c/windows/system32


6. A5M2起動。

$ wine A5M2

動く。

参考記事



・A5M2公式ページで紹介されてるやり方。ほぼこの通りだが、僕の環境だと「wine: cannot find L"C:\\windows\\system32\\A5M2.exe"」が発生した。
wine を使って Linux 上で A5:SQL Mk-2 を動作させる

・ちなみにwinecfgで設定モーダルが文字化けする場合、以下の記事を参考。
symfoware.blog.fc2.com

DeepLearning fastai #Lesson3 OVERFITTING 前半① (tmp_lesson1-quick.ipynb) 感想とか

Lesson3の動画を見た感想とか。
これまたLesson3で取り上げているのはlesson2.ipynbなのでちょっと変なタイトルになっている。

tmp_lesson1-quick.ipynbはファイルが配布されてないので注意。
今回は用語とかだけ、サラっといきます。

Lesson3 (tmp_lesson1-quick.ipynb) のサマリー



講義でやること
・Kerasを使って、犬と猫の画像解析をやってみる。
・ResNet34ではなく、ResNet50(大きい画像とか大量の画像解析に向いてる、負荷大)を使ってみる。

講義で学ぶこと
・Kerasを使った画像解析の処理の流れ。
・Kerasとtensorflow使うよりも、fastaiならカンタンなコードで精度も高く出るよ。
・もちろんコアな部分をいじるなら、Kerasとかの中身も知る必要があるかもね。

keras.io

DL用語


Keras ニューラルネットワークライブラリ。python。有能かつ有名
cross entropy 交差エントロピー。DLではロス関数の一種の意味。。。だそうです

英単語


side on photos 並んだ画像
replicate 複製する
shear せん断する、切る

fastai関数/変数とか


関数/変数 使用例 意味
bn_freeze learn.bn_freeze(true) unfreeze後にこれをしないと、バッチが正規化されてしまうらしい。詳しくは後の講義で教えてくれるとさ。
shear_range ImageDataGeneratorの引数 画像を切る範囲?

感想



fastaiなら数行で0.996とか精度でるのに、Kerus×tensorflowではもっとムズいソース書いて0.961とかそんなっぽい。
やっぱりfastaiはよくできてるし、初心者に適してると思った。
Jeremy Howard先生はGoogleにもfastaiを提案したらしい。Googleに自作のライブラリ提案するとかカッコよすぎ。
僕もやりたい。そのうち。

Lesson3へのリンクとかパス



・講義
course.fast.ai

関連する/勉強になる別記事



qiita.com

見るだけでCross Entropyについて分かった気になれる動画 (1分40秒)
ちなみに僕にはなんのことだかさっぱりでした。。。
www.youtube.com

Coursera DeepLearning fastai Lesson別の概要 (各講義の内容、動画の再生時間、参考リンクなど)

はじめに



・この記事はめっちゃ書きかけです。随時更新します。
・動画講義の内容と再生時間メモです。Lesson2以降はYoutubeの講義動画に日本語訳がなくて、結構大変だったのでメモすることにしました。
※秒単位は適当。。。

fastaiで勉強するときの注意点、知っとくといいこと



・何も変更を加えていなくても、ipynbを実行するとエラーになる場合がある。大抵Forumで調べると解決策が見つかる。
・tmp_とつくファイルは講義の補足用のファイルなので配布されてない。動画を見て内容を理解することに集中するべし。
Youtubeの字幕追加画面を使うと、講義の全内容の英語字幕が時間ごとに見れるので、復習に便利。
・Lesson2の最後のほうにAWSでの環境構築が紹介されるが、fastaiのAMIはstudentじゃないと見つからないのでちょっとめんどい。

Lesson1 IMAGE RECOGNITION



作成中。。。

Lesson2 CNNS


内容 対象ファイル 再生時間
Lesson1の続き lesson1.ipynb 00:00:00 ~ 01:12:00
・Learning Rate (学習率)
・Data Augumentation (画像のカサ増し)
・SGDR (再帰的勾配降下法)
・Differencing Learning Rate (レイヤーごとに学習率を変える)
TTA (推論時にもAugumentationを使う)


内容 対象ファイル 再生時間
Lesson1の補足 tmp_lesson1-breeds.ipynb 01:12:00 ~ 01:48:00
・Kaggle Competitionを題材にしたLesson1の補足
・ラベルをタグ付けするパターンの紹介
・画像サイズの調整とか


内容 対象ファイル 再生時間
Lesson1の補足 lesson1-rxt50.ipynb 01:48:00 ~ 01:53:00
・Resnet34の強化版Resnet50を使って精度向上を体験する


内容 対象ファイル 再生時間
Lesson2 lesson1-rxt50.ipynb 01:53:00 ~ 01:58:00
・画像認識の流れの復習


内容 対象ファイル 再生時間
環境構築 - 01:53:00 ~ 02:07:00

・PaperSpaceの紹介
AWSで環境構築

course.fast.ai

Lesson3 OVERFITTING



f:id:lazycat99:20190105025300p:plain

内容 対象ファイル 再生時間
AWSでの環境構築の続き、Tmaxの紹介 - 00:00:00 ~ 00:02:20
講義の参考になる別サイト記事紹介 ※下記リンク参照 - 00:02:20 ~ 00:05:50
講義全体のどの辺まで進んだか確認 - 00:05:50 ~ 00:08:30
AWSにkaggle-cliを導入, Kaggleデータを使ってみる - 00:08:30 ~ 00:13:50
tmp_lesson1-quick.ipynb 00:13:50 ~ 00:32:20
Word Lensを引き合いに画像(文字)から特徴量を抽出する流れを解説 00:42:30 ~ 00:50:00
Excelで画像の特徴と行列の計算を解説 conv_example.xlsx 00:50:00 ~


講義の参考になる別サイト記事
towardsdatascience.com
miguel-data-sc.github.io
teleported.in
medium.com
hackernoon.com
medium.com
めっちゃ面白いよとJeremy Howard先生イチ推しの記事たち。講義で出てくるResNet, Learning Rate, CNNの詳細がわかるっぽい。
まだ読めてないけど、読んで学んだことをブログにしたい。
個人的にはMediumとか読んで勉強したら、この人たちに近づけるのかなと思うとエモい。

Kaggle-cliの導入
Planet: Understanding the Amazon from Space | Kaggle
github.com
chrome.google.com





他のLessonは作成中。。。

DeepLearning fastai #Lesson2 CNNS (Lesson1の続き lesson1.ipynb) 感想とか

Lesson2の動画は前半はLesson1のjupyter notebookの内容なので、記事のタイトルが変なのはそのせい。
動画の00:00:00 ~ 1:11:00までの感想メモ。

1:11:00以降はLesson1の補足とか、AWSでの環境構築とかなので省く。

Lesson2の内容



・learning rate (学習率) の算出ロジック
・学習率を一定周期でリセットして、より良い値を計算する手法
・precomputeの使い方
・learn系の使い方、 freeze/unfreeze
・differential learning rate
・SGDR
TTA

DL用語


CNN convolutional neural networks。畳み込みニューラルネットワーク
data augmentation データ拡張。画像をたくさん集めるのは大変なので、画像を拡大、縮小、回転してカサまししてデータを効率よく使う手法。
TTA Test Time Augumentation。推論時にもAugumentationを使用することで精度を上げる手法
inference time 推定時間
annealing 学習率が勾配の最低値に近づくにつれて、値の下げ幅を小さくする手法。理想値に近づくにつれて、ちょっとずつ慎重に進んでくイメージ。
SGDR stochastic gradient descent with restarts。再帰確率的勾配降下法

英単語


crop (写真を) トリミングする
resilient はねかえる
fiddling つまらぬ, ささいな

cropって収穫以外の意味知らなかったな

復習



precompute

precomputeは以前に使った画像と活性化関数を使うかどうかを決めるフラグ。
learnをprecompute=Trueで初期化しているので、このままlearn.fitするとData Augumentationをした画像は適用されない。
f:id:lazycat99:20190103111519p:plain
f:id:lazycat99:20190103111532p:plain
f:id:lazycat99:20190103112318p:plain

precompute=Trueにすることで、今回サイズを変えたりしてカサ増ししたData Augumentation済みの画像が適用される。
f:id:lazycat99:20190103111554p:plain
f:id:lazycat99:20190103112149p:plain
lossがちょっとだけ小さくなっている。

learning rateのcycle_len

cycle_lenというのは何epochごとにlearning rateをリセットさせるかを指定するパラメータ。
cycle_len=1なら1epochごとに、cycle_len=2なら2epochごとだ。

SGDRでより正確なlearning rateを計算するために
今回だと3回、learning rateをリセットして計算しなおしている。
f:id:lazycat99:20190103111554p:plain
f:id:lazycat99:20190103114236p:plain

learn save/load

save Data Augumationした画像とモデルを保存する。
load 上記を読み込む。

※data/modelsとdata/tmpディレクトリに学習内容は保存される。

learn frozen/unfrozen

freeze 畳みこみレイヤーを変えたくない場合に使う。レイヤーを固定する感じ。
unfreeze 畳みこみレイヤー(エッジとか斜めの特徴量をもったレイヤー)そのものを変えたい場合に使う。

※unfreezeは引数なしだとすべてのレイヤーが対象。

differential learning rate ~レイヤーごとの学習率指定~

f:id:lazycat99:20190103142811p:plain
レイヤーごとに学習率を変えるというやりかたはちょっと衝撃だった。こんな方法があるとは。
当たり前すぎて名前もついてないらしい。

np.arrayの各引数は以下のような意味らしい。

1e-4 1e-3 1e-2
first layerの学習率 middle layerの学習率 top layerに上乗せしたlayerの学習率
基本的な地理的特徴 firstより複雑で洗練された特徴 追加した特徴

基本的な特徴については、Data Argumentationした画像を大きく反映させる必要はないので学習率を小さく設定する。
対照的に新しいレイヤーには強く反映させたいので、さっき使ったのと同じ学習率を設定する。

既存の上手くいってるモデルを活かしつつ、そのモデルに変更を上乗せするときに価値を発揮するタイプらしい。

f:id:lazycat99:20190103145546p:plain
f:id:lazycat99:20190103145658p:plain
結果を見てみると、validating lossがだいぶ下がっているのが確認できる。
学習率をレイヤーごとに変えたのがいい感じに効いてるためだ。ちょっとテンション上がる。
accuracyもちょっとあがってるし。

SGDR

今度はcycle_mult=2にしているので、勾配の降下にかかる進み具合が2倍、4倍と遅くなっている。
左端の山だと、最下点まで下ったあとにすぐジャンプして次の山に進んでしまうが、右端の山では最下点でちょっと落ち着いている。
なので、右に進むにつれて良い学習率が得られるということみたいだ。

f:id:lazycat99:20190103150543p:plain

TTA

test time augumentation。
推論するときにもAugumentationすることで、精度を高める手法。
f:id:lazycat99:20190103153348p:plain
今回だとオリジナルの画像に加えて、4つAugumentした画像を用意する。これらのすべてに対して推論して平均を採用する。
f:id:lazycat99:20190103153541p:plain
0.994とめっちゃいい値が出る。ただ単に推論するよりもAugumentしたほうが伸びるということだ。やばし。


感想



augumentationの話は聞いたことがあったけど、数値で結構効くのを確認できたのが面白かった。
学習率の計算部分を図で説明してくれていたのが呑み込みやすかった。
講義の内容は2回目ぐらいになるとちょっとわかってくるけど、まだ生徒の質問の部分がさっぱりついていけない。
Youtubeの字幕編集画面を使うと、講義のわからない内容を調べるのに便利だった。
TTAとかメソッド呼ぶだけでできるってfastaiライブラリってだいぶかっこいいと思う。

精度がくそ高いのがやっぱりテンションあがる。

Lesson2へのリンクとかパス



・講義
course.fast.ai
・フォーラム
forums.fast.ai
・画像のパス
~/courses/fastai/courses/dl1/data/planet
・データがjupyter notebook上になかった場合のダウンロード先
http://files.fast.ai/data

関連する/勉強になる別記事



データ拡張(Data Augmentation)について、画像付きで解説してくれている。わかりやすい。
qiita.com