LoginSignup
Amano_Masaki
@Amano_Masaki

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

CNN Dense層をConv層後に置ける理由について

解決したいこと

CNNを使った機械学習について質問があります。
Q1, VGG16などでDesne層4096の後にDense層4096、そこからDense層1000となっています。
つまり4096を2回経由する意味はあるんでしょうか?

Q2, Dense層の後にはFlatten層が置かれることが一般的ですが、先ほど、畳み込み層の後にDense層を置き、その後にFlattenを置くことができました。
この方法だと何が問題なのでしょうか?
一般的な構造:  conv2d(max)→Flatten→Dense→Dense
エラーが起きない:conv2d(max)→Dense→Flatten→Dense

たとえば畳み込み層の後にFlattenを置かないとエラーになります。構造が間違っているからです。ですが、conv2d(max)→Dense→Flatten→Denseとした場合エラーが起きませんでした。構造的におかしいはず(やっている人を見たことがない)ですがまともに学習は進みます。だれか何がダメなのか教えていただけると助かります。

メイン質問はQ2でQ1の回答は無くても問題ないです。

0

1Answer

1) dense4096を二層重ねる意味はあります。例えばVGG16でCNNは何層もありますよね、それと同じです。モデルを深くします。
2) 2D-Convの最後の出力は3次元で、dense layerは入力・出力とも1次元です。3次元を1次元に変換するのがflattendです。Convとdense layerの間にflattenを省いてなぜエラーが起きないかはわかりません。dense layer二つの間にflattenを入れる意味はないと思います。

2Like

Comments

  1. @Amano_Masaki

    Questioner
    初めまして。ご回答ありがとうございます。
    このサイトを使うのは初めてなので、何かご無礼があったらお許しください。

    1に関して、人によって出力前にdenseが複数あったりなかったりするので疑問に思い聞いてみました。cnn?機械学習?は完全にライブラリ依存でモデルが簡単に作れてしまうので、中身をあんまり理解せずに作っていたことが原因ですね。個人的なイメージですが、二連で同じdenseがあると同じパラメータしか経由しないイメージがあります。書いてて思ったのですが、全結合層のみのモデルとかもあるので、深くすることで何かが作用するのでしょうね。

    2に関して、畳み込みの後にdenseを入れた場合、何を参照しているのか中身を見てみたいですね。あとまともに学習が進むと書きましたが、学習が始まるのは事実で中身の計算(loss,accuracy)が正しいかどうかは不明です。

    ありがとうございました。

Your answer might help someone💌