failed to find Build Tools revision

ReactNativeの案件を触ることがあり、react-native run-androidをおもむろに叩いたところ、

A problem occurred configuring project ':app'.
> A problem occurred configuring project ':react-native-splash-screen'.
   > failed to find Build Tools revision 23.0.3

でこけた。

Androidの仕組みがよくわかっていないが、26が入っていてもダメらしい。メジャーバージョンが違うからだろう。
23.0.1も入っていたが、これは当然古いのでだめというのはわかる。

特定のリビジョンのSDK Build-toolsをコマンドでインストールする - Qiita
androidコマンドで入れれるらしいが、PATHが通ってなくてどこにあるかわからず。

MacにAndroid Studioを入れて、adbを使える状態にする - Qiita
これだ。

$ ~/Library/Android/sdk/tools/android list sdk -a
  13- Android SDK Build-tools, revision 23.0.3

$ ~/Library/Android/sdk/tools/android update sdk -a -u -t 13

でいけた。

Edge/IEで確認環境にログインできなかった

普段保守しているRailsのプロジェクトは、GitHubでプルリクエストを送るたびに自動で確認環境にデプロイする、ということをやっています。

で、この確認環境にIE/Edgeだとログイン出来ないという問題が発生。(正確にはずっとこの問題はあったんだけど、Windowsは各自ローカルで見てね、みたいになっていた)

  • オレオレSSL証明書のせい? → HTTPにしてみても駄目なので違う
  • サブサブドメインが悪い? → そういうわけでもなさそう
  • ログインは https://github.com/flyerhzm/switch_user というGemでやっているけど、関係なさそう

小一時間悩んだ結果…

ホスト名にアンダースコアが含まれているとIEでCookieが保存されない | CreativeStyle

これでした。
あぁ、知ってた…忘れてた……。


http://blog.tokumaru.org/2011/10/cookiedomain.html

IE9 サブドメインにも送信される

というのが今のEdgeでも変わらずこの仕様らしく、追加でハマった。
(セッションIDが重複して送られていた)

resize2fs /dev/xvda1: Nothing to do!

EBSがオンラインで拡張、タイプ変更、IOPSの変更ができるようになりました。 – サーバーワークスエンジニアブログ
のニュースを見てから、ディスク拡張の機会に恵まれなかったのですがついに今日その日がやってきました。
(AWSは高いので個人では使ってない)

日本語化されてない「Modify Volume」メニューからさっくりと実行。
あとはOSでコマンド叩くだけでしょ…

$ sudo resize2fs /dev/xvda1 
resize2fs 1.42.12 (29-Aug-2014)
The filesystem is already 7863803 (4k) blocks long.  Nothing to do!

…!?

$ lsblk
xvda    202:0    0  50G  0 disk 
└─xvda1 202:1    0  30G  0 part /

Linux パーティションを拡張する - Amazon Elastic Compute Cloudをやる必要がある!?それなら結局今まで通りの手順の方が楽なのでは…とか思っていたら、

Modify VolumeでAmazon Linuxのルートボリュームサイズを変更しても変わらないときの対処方法 | Developers.IOの通りgrowpartすれば解決でした。

めでたしめでたし。

PyCall-MNISTのリファクタリング(レイヤークラスを使用)

勉強用に作っている https://pycall-mnist.herokuapp.com をリファクタリングした。

O'Reilly Japan - ゼロから作るDeep Learning の第4章をベースにした素朴な実装だったが、第5章を参考にレイヤークラスで処理するようにした。

predictに(勝手に)用意していたskip_activate_outputフラグは不要になった。
必要な時にlastLayerを呼び出す形に。
※ 推論の時は生データ(スコア)でいいのでlastLayerは不要。

まずはSigmoidのまま実装して、rspecが通ることを確認。
その後、ReLUに切り替えた。

Sigmoid

train acc, test acc | 0.9468333333333333%, 0.9452%

ReLU

train acc, test acc | 0.9791166666666666%, 0.9713%

ReLUにしただけで認識精度が3%も上がった…!

PyCallのバージョンも上がっていたので合わせてアップデート。特に問題なし。

ソース

Layers by tnantoka · Pull Request #1 · tnantoka/pycall-mnist

参考

Python DeepLearningに再挑戦 15 誤差逆伝播法 Affine/Softmaxレイヤの実装 - Djangoroidの奮闘記

MNISTのデータを使った手書き数字認識をRubyで

O'Reilly Japan - ゼロから作るDeep Learning、1度読んだだけでまだ理解できてない部分もあるが、とても良い本。
手書き数字認識ぐらいなら自分でも余裕でできるんじゃね?と思わせてくれる。

読書メモ

殴り書き。

  1. [読書メモ] ゼロから作るDeep Learning: まえがき - blog.tnantoka.com
  2. [読書メモ] ゼロから作るDeep Learning: 第1章 - blog.tnantoka.com
  3. [読書メモ] ゼロから作るDeep Learning: 第2章 - blog.tnantoka.com
  4. [読書メモ] ゼロから作るDeep Learning: 第3章 - blog.tnantoka.com
  5. [読書メモ] ゼロから作るDeep Learning: 第4章 - blog.tnantoka.com
  6. [読書メモ] ゼロから作るDeep Learning: 第5章 - blog.tnantoka.com
  7. [読書メモ] ゼロから作るDeep Learning: 第6章 - blog.tnantoka.com
  8. [読書メモ] ゼロから作るDeep Learning: 第7章 - blog.tnantoka.com
  9. [読書メモ] ゼロから作るDeep Learning: 第8章 - blog.tnantoka.com

ニューラルネットワークとDeep Learning

ここまでの理解。

たとえば、16ピクセルの1と2という画像内の数字を認識したい場合。(2クラス分類問題)
3層ニューラルネットワークを使うとする。

  • 入力層(第0層)は16×16で256個。
  • 隠れ層(第1層)は100個、隠れ層(第2層)は50個とか任意で。
  • 出力層(第3層)は1か2かなので2個。
  • 各ニューロン間の信号には重みが。
  • それぞれの層にはバイアスも。
  • 各ニューロンでは活性化関数で入力を変換。

訓練データをもとに、バイアスや重みの調整をひたすら繰り返して、いい感じになるものを探す。
テストデータでも良い精度が出ればOK(汎化)。出なければ過学習。過学習ってとても人間っぽい。

これのもっと層を深くしたものがDeep Learning。

結構泥臭い。コンピュータの性能向上によって実用できるようになった、というのはそういうことだったのか。

Rubyでやってみる

写経はいまいちテンションがあがらない。今Pythonを学習したいわけではないのである。

ちょうど Ruby + PyCallで機械学習をやってみた at Pydata Okinawa #23 - The paradigm shift という記事が。
PyCallの話題を以前耳にした時は直近機械学習をやる予定ではなかったのでスルーしてしまったが、今の僕にとっては大変ありがたい存在である。

というわけでやってみた。(関係ない話題も入ってますが)

  1. PyCallでNumPyを使う - blog.tnantoka.com
  2. PyCallでMatplotlibを使う - blog.tnantoka.com
  3. PycallとNumPyで3層ニューラルネットワーク - blog.tnantoka.com
  4. PyCallをDockerで - blog.tnantoka.com
  5. HerokuでPyCall(NumPy)とSinatraを動かす - blog.tnantoka.com
  6. RubyでMNISTのデータを読む - blog.tnantoka.com
  7. PyCallでMNISTを使った推論 - blog.tnantoka.com
  8. PyCallでMNISTの学習 - blog.tnantoka.com
  9. ゼロから作るDeep Learning: 第4章のgradientをRuby化 - blog.tnantoka.com
  10. PyCallでMNISTの実データを使った学習・推論 - blog.tnantoka.com
  11. PyCallで手書き数字認識のWebアプリ - blog.tnantoka.com
  12. PyCall-MNISTのリファクタリング(レイヤークラスを使用) - blog.tnantoka.com

Rubyで書くことでただの写経より内容を理解せねば感があってよかった。