目標と現状
大局的目標
機械学習に関しては全くの初心者なので分からないことだらけだ.それでもConvolutional Neural Network (CNN) を学ぶ時が来た!実装もしないといけないので,Caffeを通して学んでいきたい.本シリーズの目標はCNNのことを全く知らない人間が少し理解することにある.
今回の目標
さて,最初の目標は良い教科書を揃え,自分が何が理解できていないのかを理解するところからだ!
現状
Caffeのサンプルを動かした(過去記事参照)程度.尚,画像処理や線形代数の基礎知識は備えているつもりです.
良質な教材
Caffeを使ったCNNによる手書き文字分類
このサイトに4つの記事があるが,これを読んで,私の基本的な疑問は全て解消された.構造的に,かつ適切な日本語で説明されており,これを読まないと損すると思ってしまうくらいだ.
4つの記事の各項目を勝手ながら抜粋させて頂くと,ここから何が学べるか把握できると思う.いくつかのサイトを眺めたが,これがベストであり,これ以外は読まなくてもよいのではないかと思う.半日もあれば全て読めます.
- CNNの概要、データセットの準備
- CNNの構造と学習の仕組み
- prototxtの作成
- prototxtとは
- prototxtの基本文法
- 4つのprototext
- train.prototext / test.prototxt の作成
- 各層の基本的な記述方法
- 入力層 (Data)
- 畳み込み層 (Convolution)
- プーリング層 (Pooling)
- 全結合層 (InnerProduct)
- 活性化関数 (ReLU)
- 誤差関数 (SoftmaxWithLoss)
- solver.prototxtの書き方
- 今回のまとめ
- ネットワークの訓練方法
- フォルダ構成の確認
- 訓練の方法
- 訓練誤差とテスト誤差
- 正答率の算出
- 今回のまとめ
最終回のまとめに,
次は、訓練により出来上がった caffemodel を使って、実際の一般データを識別させる方法、つまり、deploy.prototxtの書き方とPyCaffeでの使い方について見ていきます。
とあるのですが,残念ながら5つ目の記事を見つけられませんでした... 残念.
更なる学習のために
英語教材
- CS231n Convolutional Neural Networks for Visual Recognition
- 英語での用語を理解したい場合
- Machine Learning | Coursera
- オンラインコース(英語)
- めちゃくちゃ時間がかかってしまうが,とても分かりやすいという噂
書籍
- ゼロから作るDeep Learning―Pythonで学ぶディープラーニングの理論と実装
- 購入済み
- ひとまず,3章のニューラルネットワークまで読んだが分かりやすい
- 8章まであるので道のりは長い...
- Caffeをはじめよう―深層学習による画像解析の実践
- こちらは未購入
- 目次を見る限りCaffeについてのことは大抵書いてある様子
便利ツール
さて,概要を把握したところで,Caffeは,基本的にprototxtを編集して動かせることが分かった.ということで,これを編集するための便利ツールを探した.
Sublime Text 3
これ自体はただのテキストエディタですが,パッケージをインストールすることで,様々な拡張子のファイルを見やすいようにカラーリングしてくれるところが嬉しいのです.早速,proto buffやprototxtが見やすいようにパッケージをインストールした.
パッケージのインストール方法は以下の通り.
- Tools/Command Palette... Ctrl+Shift+Pを開いてinstallと入力(下図)
- Package Control: Install Packageを選択
- Proto等と入力してパッケージをインストール
尚,私は以下の2つをインストールした.
- Protobuf Syntax Highliting
- Caffe Prototxt Syntax
Netscope
prototxtの内容を可視化してくれるオンラインサービス.手順は以下の通り.
- "Launch Editor"からエディタを開く
- 左画面のテキストメニューに自身のprototxtファイルの内容をコピペ
- Shift + Enterで右画面に可視化
CaffeのMNISTのサンプルにあるlenet_train_test.prototxtを可視化すると以下の様になる.ブロックにマウスオーバーすると,その詳細が見られる.
まとめ
- CNNに関わる処理の流れと専門用語をWebサイトを読んで把握した
- Caffeで必要な処理を把握した(ただし,学習データを使って認識させる処理は不明)
- 現状,講義を受けた学生状態(理解したつもりだが実践できるかどうか分からない状態)なので,次回は,prototxtを実際に編集してCaffeを実行する予定