[
板情報
|
カテゴリランキング
]
したらばTOP
■掲示板に戻る■
全部
1-100
最新50
| |
CS231n: Convolutional Neural Networks for Visual Recognition
1
:
karino2
:2017/05/12(金) 21:11:59
http://cs231n.stanford.edu/
スタンフォードのCNNで画像認識のコースのOCW。
自分でいじりたくなったので簡単に触れそうな奴をやってみよう、という事で。
2
:
karino2
:2017/05/12(金) 21:19:40
とりあえず金に糸目はつけない、という事でGoogle Compute Engine使っていくかなぁ。
コースとしては$100のquotaとなっているので、その位には収まるのだろう。
3
:
karino2
:2017/05/12(金) 22:14:17
ふんふんふん、とgceのチュートリアルをやっていったが、
http://cs231n.github.io/gce-tutorial/
Jupyterへのアクセスをする段階になって、ポート指定して全アクセス許す、となっている。
これはさすがにまずいんじゃないか?
基本的にはチュートリアル通りに余計な事をしないように進めたいのだが、MS時代にIPが秘密でも勝手に探られてアタックされるから絶対こういうのはやっちゃいかん、と散々教育を受けたからなぁ。
とりあえずポートフォワードする方向でやってみるか。
4
:
karino2
:2017/05/12(金) 22:24:30
ポートフォワード越しにJupyter Notebookにつなげる手順。
チュートリアルと以下の部分だけ変える。
1. gcloudコマンドに--でsshのオプションを渡す。
gcloud compute ssh --zone=us-west1-b instance-1 -- -L 51234:localhost:51234
2. チュートリアルでjupyter_notebook_config.pyを編集する所で、
c.NotebookApp.ip = 'localhost'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 51234
とする。
3. jupter-notebookを立ち上げて、gcloud実行しているマシンからはブラウザで
http://localhost:51234
にアクセス。
5
:
karino2
:2017/05/12(金) 22:42:05
とりあえずeditbookも入れて、ポートフォワードでアクセス出来る事も確認。
これでチュートリアルは終わりかな。
今日の所はこれくらいにしておいてやろう。
6
:
karino2
:2017/05/13(土) 15:36:08
さて、イントロダクションとしてNearest Neighbor Classifierのあたりを読んでいて、実際に試そうと思ったが手順が良く分からん。
このCIFAR-10のデータとかは自分で持ってこないとダメなのかしら?
お、assignments1に持ってくる方法が書いてあるな。
http://cs231n.github.io/assignments2017/assignment1/
7
:
karino2
:2017/05/13(土) 16:27:47
Nearest Neighborを実行したら帰ってこない。
そりゃそうか。これ各画像ごとに5万画像とのマッチングをしている訳だろうからな。
1万x5万画像。まぁ終わらんか。
8
:
karino2
:2017/05/13(土) 16:51:46
あまりにも終わらないのでトレーニングセット5000、テストセット1000でやってみたが、これでも終わらない。
元の多すぎじゃね?
で終わった結果>0.288
だいたいあってるかな。
9
:
karino2
:2017/05/13(土) 16:53:46
何はともあれ、GCE+Pythonでの初めての画像識別タスクが終わったヽ(´ー`)ノ
セットアップとかなんだかんだで実際にやるまでいろいろあるから、ここまでやるのも立派な成果だす。
といってもコースのスクリプトが良く出来ているのでそれほどの労力でも無いが。
でも実際に手を動かすって大切だよね。
10
:
karino2
:2017/05/13(土) 17:41:59
せっかくだからkNNの課題を解く。
まずはtwo-loopとone-loopを書いてみる。no-loopは後回し。
次はpredict_labelsだが、ここはいかにもPythonのイディオムっぽいよなぁ、という事でクックブックでも見直す事にする。
11
:
karino2
:2017/05/13(土) 21:23:46
no loopのケースをしばらく考えたが分からなかった。
ナイーブに
データ次元 x test_num x train_num
のようなサイズの配列が出来るようなブロードキャストはMemory Errorが出てしまう。
結構考えたけど分からなかったのでギブアップ。
12
:
karino2
:2017/05/14(日) 13:29:13
さて、k Nearest Neighborまではまぁまぁ真面目にやったが、この後はどうしたもんか。
SVMやgradient decentは適当で良い気もするが。
とりあえずざっと眺めてみて、どこまで真面目にやるか考えよう。
13
:
karino2
:2017/05/14(日) 14:38:23
SVMは説明だけは読んでおく。手は動かさないで良かろう。
次はsoftmax。
14
:
karino2
:2017/05/14(日) 15:21:44
メモを書く。
https://gist.github.com/karino2/675967d4fef5ed88f6b4b4da99815f97
15
:
karino2
:2017/05/14(日) 15:29:24
softmaxを確率として対数尤度を最大化しているとみなすと正規化項はMAP推定で事前分布をガウス分布とみなした時のパラメータと解釈できる、という話。
PRMLでやったね。
こういう話がさらっと載っているのは復習に良い。
16
:
karino2
:2017/05/14(日) 15:49:46
SVMとsoftmax、一応ざっと読み終わり。結局だいたい全部読んでしまった。
復習には割と手頃。
次はstochastic gradient descent。
これもざっと読むだけで良いかな。
17
:
karino2
:2017/05/14(日) 20:48:37
stochastic gradient descent読み終わり。良く書けているなぁ。
gradient descentは軽く実装も見ておきたいが、今はGCEのインスタンス立ち上げてないのだよな。
後で他の件で必要になった時についでに見るでいいか。
18
:
karino2
:2017/05/14(日) 23:20:21
backprop読み終わり。
計算グラフは使った事無かったので、読んでおいて良かった。
19
:
karino2
:2017/05/15(月) 19:43:50
NNの一つ目はざっと見た。
で、二つ目のsetting upのlecture noteを読んでいる。
これがなかなか良くまとまっている。
Batch Normalizationとかdropoutのような最近のDeep NNなテクニックが一通り網羅されてて、良いまとめ。
20
:
karino2
:2017/05/16(火) 01:18:00
learningの所は最近の研究が良くまとまってて素晴らしい。
Nestesv MomentumとかAdamとか良く名前は見るが元論文読んでなかった物がちゃんと説明されてて、これまで分かってなかった事が全部潰せた感じがある。
これは良い教材だなぁ。
21
:
karino2
:2017/05/16(火) 07:57:41
putting it togetherでのsoftmaxのLの微分の計算が省略されてたのでやっておく。
https://imgur.com/8Z7GSxP.jpg
22
:
karino2
:2017/05/16(火) 08:23:26
dWの導出。
https://imgur.com/sTrU98J.jpg
https://imgur.com/nEjOP4n.jpg
23
:
karino2
:2017/05/16(火) 08:36:51
続き。
https://imgur.com/hPiKvyU.jpg
24
:
karino2
:2017/05/16(火) 09:05:53
dhiddenも。
https://imgur.com/tvIekuK.jpg
25
:
karino2
:2017/05/16(火) 09:09:01
これ、転置になったりするの、本当は行列演算でそのまま出せそうだよなぁ。
実務的には次元解析で良いって言ってたので、慣れてきたらそういうもんだ、で良いと思うが。
26
:
karino2
:2017/05/17(水) 16:26:17
transfer learningまで一通りレクチャーノート読み終わり。
凄い勉強になった。
CNNやDNNを触る気なら必見。
27
:
karino2
:2017/05/17(水) 20:19:28
さて、CNNのassignmentを見てみるか、と見てみたが、これって提供されているイメージじゃないと実行出来ないのかしら?
.envフォルダが無いっぽいが。assignment1の奴でactivateして試してみるか。
GPUインスタンスは必要になったら作る気でいるが、Question 5以外は要らないって言ってるからなぁ。
少し試してみてはまりそうなら、普通のインスタンスをイメージからもう一つ作ってしまおう。
28
:
karino2
:2017/05/19(金) 17:47:34
ではFullyConnectedから。
これもnumpyで自分で実装するのか。なかなか男らしいな。
bのbackwardでちょっと苦戦する。
bは足すだけだから、bの微分は当然1だよな。
でもdoutの次元とbの次元が違う。それはブロードキャストするからだ。
その時、bの値としては何が正しいのだろう?
Backpropagation, Intuitionsを見直すとsumを取るとしれっと書いてあるし、答えもそれで良さそうだが。
それぞれの経路でbをちょっと動かすとb1, b2, b3の三つの影響があるとして、全体に与える影響は?と言えばその合計か。
ちょっと納得した。
29
:
karino2
:2017/05/19(金) 19:36:24
svm_lossの模範解答のnumpy力が高すぎて凄い。
こんな風に書けるようにならんとなぁ。
30
:
karino2
:2017/05/19(金) 20:28:58
softmaxを実装してない気がするんだが、自分で実装しなきゃダメなのか?
softmax_lossがあるからほとんど同じ実装なのだが。
31
:
karino2
:2017/05/19(金) 20:41:19
あー、スコアってsoftmax取る前の値か。なるほど、softmax_lossだけでいいのね。
32
:
karino2
:2017/05/19(金) 21:42:08
solverの手前まで終わったので今日はここまで。
33
:
karino2
:2017/05/20(土) 11:17:21
accuracy 50%を一応達成。結構ぎりぎりだが。
2層ではこんなもんか。
34
:
karino2
:2017/05/20(土) 12:16:26
5レイヤーでオーバーフィットが全然しない。
なんかバグってるんじゃないか?という事を疑うレベル。
35
:
karino2
:2017/05/20(土) 12:23:28
ようやくオーバーフィットした。無茶苦茶ファインチューンやな(^^;
36
:
karino2
:2017/05/20(土) 14:14:20
なんかadamのnext_wのerrorが大きいなぁ。
next_w error: 0.00152184517579
まぁそのあとのグラフは正しそうなのでいいか。
37
:
karino2
:2017/05/20(土) 14:16:33
FullyuConnectedで最強のモデルを作ろう、の所まで来た。
ただ解説にはbatch normalizationとdropoutやってからの方がいいぜ、と書いてあるので、先にこちらに進む。
38
:
karino2
:2017/05/20(土) 15:03:59
バッチノーマライゼーションのbackpropは計算グラフ書いて自分で出せ、とかおっしゃる。
あんま自信無いが、これでいいのかな?
https://imgur.com/skrl7kz.jpg
39
:
karino2
:2017/05/20(土) 16:04:14
元論文を読むとdxは三つの項の和になっているなぁ。
40
:
karino2
:2017/05/20(土) 16:08:09
あー、そうか。これ、muとsiguma2もxから求めてるからか。
なるほど。
でもそれじゃあテストの時はどうするんだ?バッチサイズが無限大と考えてゼロにするのかな?
41
:
karino2
:2017/05/20(土) 16:43:41
https://imgur.com/t4Jamg2.jpg
これはさすがに面倒すぎじゃないか。
42
:
karino2
:2017/05/20(土) 17:03:24
ルートが深層学習の教科書ではイプシロンを含んでないが、元論文では含んでいる。
これで結果が異なるっぽい。
そして同じ事をやっている解説を見つけた。
https://kratzert.github.io/2016/02/12/understanding-the-gradient-flow-through-the-batch-normalization-layer.html
やっぱりこんなになるよねぇ。
43
:
karino2
:2017/05/20(土) 17:37:39
教科書のミスを直して再計算。
論文と一致。
https://imgur.com/73YDppa.jpg
44
:
karino2
:2017/05/20(土) 19:21:09
やっと一致した〜〜!
計算ミスを潰すのに2時間くらいかかった…
凄い課題だなぁ。
45
:
karino2
:2017/05/20(土) 21:01:28
batch normalizationをfully connected netにつなげて実行してみた。
うぉー、すげー!結果が凄い変わるね。
ただvalidationロスはそうでも無いか。
つまりトレーニングセットに対して正しい評価関数は出来ている訳だな。
46
:
karino2
:2017/05/20(土) 22:00:16
dropoutの実装終わり。
確かにoverfitしてないようには見えるが、validationのスコアがあんまり変わらないような。
これはどうなのかなぁ。
47
:
karino2
:2017/05/21(日) 10:11:10
CNNの実装を開始。conv_backwardを実装しようと講義資料を見たら、導出は簡単、と書いてあるだけ(^^;
仕方ない。自分で導出するか。
48
:
karino2
:2017/05/21(日) 10:29:40
dwは自身の対象とするピクセルの和、だよな。
dbはいつも1か。
dxはどうなるんだろう?
49
:
karino2
:2017/05/21(日) 13:00:01
doutを反映してなかった。
でもこういうトラブルを追う過程で端から端まで検討しなおすのは良い勉強になるね。
で、max poolまでforwardとbackward終わり。
50
:
karino2
:2017/05/21(日) 13:33:11
cnn.pyのコメントに
input_dim: Tuple (C, H, W)
とか書いてあるのだが、C, W, Hのまちがいじゃなかろうか。
サンプルが全部WとHが同じ値なのでどっちか分からん…
51
:
karino2
:2017/05/21(日) 14:29:42
なるほど、CHWを潰して戻せば良いのね。
52
:
karino2
:2017/05/21(日) 14:30:36
一貫してC, H, Wの順番だからこれであってるっぽいなぁ。
まぁいいや、どうせインプットのサイズはいつも正方形だから。
53
:
karino2
:2017/05/21(日) 15:09:48
spatial batch normalizationおしまい!
よし、これでcnn.pyも終わったぜぃ。
54
:
karino2
:2017/05/21(日) 19:47:55
GPUインスタンスを作ってTensorflowコードを実行してみた。
次は実際に自分でモデルを作る所。よしよし。盛り上がってきたぜ!
55
:
karino2
:2017/05/21(日) 19:53:56
自分の書いたコードを参考にしたいのと、最初の試行錯誤はGPUインスタンスじゃなくてもいいや、と思いCPUインスタンスの方に変更。
56
:
karino2
:2017/05/21(日) 20:04:51
少しTensorflowの勉強もしたいので、お隣のCS 20SIの方の最初の方の奴を軽くやる事にする。
http://jbbs.shitaraba.net/bbs/read.cgi/study/12706/1489317317/l50
57
:
karino2
:2017/05/21(日) 21:45:07
ひとしきりつついてだいたい分かったのでCNNの例を見直してみる。
strideが[1, 2, 2, 1]ってなんじゃ?とドキュメントを見ると、最初と最後の1はそれを入れとけ、という物らしい(なんじゃそりゃ)
https://www.tensorflow.org/api_docs/python/tf/nn/conv2d
reshape([-1, 5408])の-1はバッチサイズになるのだろうな。(サイズのinferとしても使える、とある)
https://www.tensorflow.org/versions/r1.2/api_docs/python/tf/reshape
58
:
karino2
:2017/05/21(日) 21:53:53
onehot(y, 10)
はちょっとわかりにくいが、10がdepth、つまり結果の次元で、
0なら [1, 0, 0, 0, ..., 0]
が、
1なら[0, 1, 0, 0, ..., 0]
が、
という風なベクトルに変換されるという事っぽいな。
https://www.tensorflow.org/versions/master/api_docs/python/tf/one_hot
59
:
karino2
:2017/05/21(日) 21:57:32
reduce_meanはただmeanをとるだけっぽい。
これで一通り分かったかな。
60
:
karino2
:2017/05/22(月) 12:44:53
spatial_batch_normalizeはこちらを参考に考えている。
http://codegist.net/code/tensorflow-spatial-batch-normalization/
betaの次元は多次元でいいのかなぁ。inputをreshapeしなきゃダメか?
新着レスの表示
名前:
E-mail
(省略可)
:
※書き込む際の注意事項は
こちら
※画像アップローダーは
こちら
(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板