質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.45%

  • Python

    12377questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 3.x

    10346questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • MacOS(OSX)

    2404questions

    MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

  • TensorFlow

    962questions

kerasを用いたCNNでの犬猫判別

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,241

kaitokimura

score 51

Mac OS Sierra 10.12.1

現在kerasを用いたCNNで犬猫判別をしています。
犬猫の画像を128*128(3チャンネル)にリサイズして
ミニバッチを採用しています。
3*3の60カーネル畳み込み層でrelu関数を用いたものが2層
マックスプーリング層が2*2
ドロップアウト25パーセント
3*3の60カーネル畳み込み層でrelu関数を用いたものが2層
マックスプーリング層が2*2
ドロップアウト25パーセント
Flattenしrelu関数を用いた256の全結合層
ドロップアウト50パーセント
ソフトマックス関数でクラス分類(犬か猫かの2択)
オプティマイザにはadadeltaを用いていて損失関数にはcategorical_crossentropyを用いています。
エポック数は30です。
この結果val_accが76%しかいきませんでした。
いくつか疑問があります教えてください。
①まずacc,loss,val_acc,val_lossについてです。
解釈ですがaccはトレーニング画像の正答率。lossはcategorical_crossentropyからの値(この値を減らすための重みを調整して行ってくれている?)、val_accはテスト画像の正答率val_lossはテスト画像のlossという感じでよろしいですか??
②層の組み合わせなのですが大まかな組み立てはできませんか??一層一層追加していき試行錯誤で正答率を上げていくしかないのでしょうか??
③カーネル数の増減による影響はなんでしょうか??
④ドロップアウトを挟むところは適正でしょうか?誤っていたらどのように使うことが適切でしょうか。
⑤全結合層の中間層??の増減により影響はなんですか??ここのパラメーターは結果によって調整するくらいの感覚なのでしょうか??
色々質問があり申し訳有りませんがよろしくお願いいたします。
一応一通り教科書は読まさせていただきました。
コーディングしていき疑問点を解消していきたい次第です。。。
足りない情報がありましたら答えさせていただきます。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+4

どのような教科書を使ったのかは知りませんが、非常に基本的な内容です。また、あなたの現状の理解度と問題の難易度がマッチしていないように思います。まずは基本事項を確認しましょう。

  1. acc, loss, val_acc, val_loss
    acc: 精度, accuracy 正解率のこと
    loss: 損失関数の値。お考えの通り、大まかにはこの値を減らすように学習をしています。
    val_acc, val_loss: それぞれ「validation」セットのacc, loss です。どの画像のacc, lossなのかはコードの書き方によります。大まかにはvalidation_splitを使って指定しているなら。トレーニングセットから切り出したヴァリデーション画像のacc, lossです。validation_dataにテスト画像を指定しているならテスト画像のacc, loss になります。validationとtestには違う画像を使うことをおすすめします。

  2. 層の組み合わせについて
    これについては6.で後述します

  3. Conv層のkernel数
    そのままで申し訳ありませんが畳み込み層のフィルタの大きさです。
    以下の記事などでそもそも畳込み層で何をやっているのかを確認しましょう。
    http://qiita.com/icoxfog417/items/5fd55fad152231d706c2

  4. ドロップアウトの位置
    コードがないと正確なことは言えませんが、おおまかには問題ないように思います。

  5. 全結合層のユニット数
    また、そのままで申し訳ないですが、アフィン変換行列のサイズとなります。
    多いほうがモデル誤差が小さくなりますが、トレーニングデータの量によっては過学習の原因となりますので、適宜調節してください。

  6. ネットワークの構造について
    まず、トレーニングデータ、テストデータの画像数がわからないですが、このような簡単な構造で76%なら良いほうではないかと思います。
    MNISTなら、このような構造でもよいかとは思います。しかし、犬、猫の分類のように難しい分類には力不足です。GoogleNet, AlexNet, VGGNet などを持ちださなければ太刀打ち出来無い問題だと思います。

以上です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/05 22:45 編集

    validation_dataにテスト画像を指定している場合。単純にtrainで作成した分類器によってどれだけの精度で判別できているかがval_accと考えてよろしいでしょうか??
    3につきまして、conv層のことは勉強したのですが枚数が全体にちょうどフィルターをかけることができる枚数を指定すればいいですか??(例えば元画像が128*128の場合3*3のフィルタをかけたい場合枚数はどう指定するのが適切なのでしょうか。)
    5、6に関しましてとてもわかりやすい説明ありがとうございます。

    キャンセル

  • 2017/07/05 23:09 編集

    validation_data にテスト画像を与えているなら val_acc はテスト画像の精度です。 しかし、そのような方法で使うことを意図しているものではありません。テスト画像の精度は model.evaluate()ではかってください。

    畳み込み層のフィルタについては、誤解しているようですね。フィルタの枚数と画像サイズは関係ありません。大雑把な説明ですが、カーネルサイズが画像サイズと一致していて、フィルタ枚数が100なら全体での畳込みの回数は100回です。逆に、カーネルが画像を100分割し、フィルタ枚数に100を指定するなら、全体では1万回です。

    キャンセル

  • 2017/07/05 23:20

    ようやく全て分かったような気がします。すごく納得しました。笑
    関数名まで教えてくださってありがとうございました。ようやく一つ進むことができそうです(泣

    キャンセル

  • 2017/07/05 23:25

    回答いただいたお二方ありがとうございました。後に回答いただいた方も大変わかりやすかったのに申し訳ございませんでした。またお二方ともまたよろしくお願いします。

    キャンセル

+2

答えられる範囲で答えます
①概ねあっていると思います.
kerasを使用されているとのことですので,fitメソッドのvalidation_splitを使っている前提でお話します
val_accやval_lossはvalidデータに対する数値かと思います.一般的に機械学習ではデータをtrainデータ,validデータ,testデータの3種類に分割します.trainデータではモデルのパラメータを,validデータではモデルのハイパーパラメータを調整するのに使います.

②画像認識で有名なモデル(VGGやresnet)について調べて見るのはどうでしょうか?
そのモデルがなぜ精度改善に繋がったのかなどを理解するのがいいと思われます

⑤中間層の数は①で触れたハイパーパラメータの1つです.
中間層の数を増やせばモデルの表現能力は向上しますが,汎化性能が落ちる恐れがあります.逆に数を減らせばモデルの表現能力は低下し精度が悪くなる可能性があります
モデルの適切な表現能力を見極めるために,中間層の数を変えては学習を回し,val_lossがどう変化するかを見守ることになるかと思います

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/05 22:35

    2、5については理解できたのですが、ではここでのパラメータとハイパーパラメータとは何を意味していますか??人間が予め設定しておかなければいけないものをハイパーパラメータと呼びますよね??ユニット数やニューラルネットワークの層等自分で決めるパラメータということですよね??validデータではこの人間が決めたパラメータを調整するのですか??trainとvalidについてもう少し教えていただきたいです。

    キャンセル

  • 2017/07/05 22:43

    SGDで自動的に調整される値(Dense層を構成する行列など)をパラメータ,Dense層のユニット数やDropoutの確率などの値をハイパーパラメータといいます.仰られている通りハイパーパラメータはvalidデータを使って調整します.

    trainデータの一部(10%など)を取り出してvalidデータとすることが多いです.validation_splitはfitメソッドに与えられたtrainデータ(X, y)のうち何%をvalidデータとして使うかを指定します
    https://keras.io/ja/models/sequential/

    キャンセル

  • 2017/07/05 22:54 編集

    私が自分で何をしているのかわからなくなりました。笑
    splitでデータを分けているのですがそれはtrainデータとvalidデータを分けてくれているということなのですよね。
    testデータらしきものをこれ以外に設けていないのですが、この場合validデータがtestデータの役割をしているということですか?
    てっきりトレーニング画像でパラメータを調整した後、val_accはどれだけ分類できているかの精度を示しているものだと考えていました。この考えは間違えですか?
    それとも今自分は犬か猫かの分類さえできておらずパラメータ調整しているだけつまり分類器を作成しているだけに過ぎず、testデータを新たに与えてあげなければいけないのでしょうか?大変申し訳ないです。

    キャンセル

  • 2017/07/05 23:06

    validデータを見てハイパーパラメータを調整しているとモデルがvalidデータにオーバフィットし,モデルを正しく評価出来ません.
    そのためにtestデータが用意されています.つまりモデルを評価する場合,testデータに対する正解率を見なければなりません
    大抵のデータセットの場合,最初からtrainデータとtestデータは用意されていると思いますが...

    キャンセル

  • 2017/07/05 23:23

    過学習が起こりうるわけですね。trainデータの中の数割をvalidデータとして扱い両方のデータを用いてパラメータハイパーパラメータを調整し、testデータはこれらの精度を測るものですか。

    キャンセル

  • 2017/07/05 23:26

    そうです

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.45%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Python

    12377questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 3.x

    10346questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • MacOS(OSX)

    2404questions

    MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

  • TensorFlow

    962questions