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

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

新規登録して質問してみよう
ただいま回答率
85.30%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

2回答

851閲覧

畳み込み層とレイヤーの関係について

YNN35

総合スコア22

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

0クリップ

投稿2022/03/03 11:32

編集2022/03/03 12:16

疑問点

32x32x3(3つのレイヤー)の入力に対して6つのフィルターを畳み込むと、28x28x6(6つのレイヤー)のテンソルに変換できるような説明が様々なところで見受けられますが[1]、この変換がどのようになっているのか詳しい説明があるところが無くわかりません。

仮定

個人的な推測になりますが、3つのレイヤーに2つずつのフィルターを適用し、1つのレイヤーから2つの新しいレイヤーを新たに生成するというアルゴリズムではないかと思いました。(2,2,2)

仮定があっているか

しかし、この個人的推測は間違いではないかと考えています。なぜなら、上の例だと5つのフィルターで畳み込むことが可能[2] (kerasで実行できるうえにそのような検索結果も出ている)だからです。

仮定のアルゴリズムで3つのレイヤーを5つのフィルターで畳み込もうとすると、どうしても一つのレイヤーだけ適用できるフィルターの数が一つだけになってしまいます。(2,2,1)

参考文献に乗っている1.5倍の例も同様です。

改めて聞きたいこと

このように、レイヤーとフィルターの関係がわからないので正しいアルゴリズムを教えてください。

参考文献

[1] (参考例)https://qiita.com/icoxfog417/items/5fd55fad152231d706c2
[2] https://jp.mathworks.com/matlabcentral/answers/473742-cnn(その際、フィルター数を1.5倍にしたり、3倍にもできると思います。)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

畳み込み演算は次のページの方が丁寧に説明されていると思います。
(一部だけ引用しますが、リンク先のページの最初から順を追って見ていけば(実際に計算してみれば)畳み込みで高さと幅とチャネルが減っていくのがわかると思います)

簡単な例として、1チャネルのインプットデータを3つのチャネルにする場合は、カーネルを3つ用意し、それぞれに畳み込み演算を行います。

これでアウトプットが3x3x3(チャネル)となりました。
$𝐶_in$ チャネルのインプットデータを出力がさらに $𝐶_out$ チャネルにする場合は、 $𝐶_in$ 個ののカーネルを $𝐶_out$ 組用意して、同じように畳み込み処理をします。

https://data-analytics.fun/2021/11/23/understanding-convolution/#toc3

入力のチャネルが複数の場合は、フィルター(カーネル)のチャネルも入力のチャネルに合わせます。
その複数のチャネルがあるフィルター(カーネル)をいくつ用意するかということになります。

NumFilters — フィルターの数
正の整数
フィルターの数。正の整数として指定します。この数値は、入力の同じ領域に結合する畳み込み層のニューロンの数に対応します。このパラメーターは、畳み込み層の出力のチャネル (特徴マップ) の数を決定します。
(略)
NumChannels — 各フィルターのチャネルの数
'auto' (既定値) | 正の整数
各フィルターのチャネルの数。'auto' または正の整数として指定します。
このパラメーターは、常に畳み込み層への入力のチャネル数に等しくなります。たとえば、入力がカラー イメージの場合、入力のチャネルの数は 3 です。現在の層の前にある畳み込み層のフィルターの数が 16 の場合、現在の層のチャネルの数は 16 です。
(略)
たとえば、入力イメージが 32 x 32 x 3 のカラー イメージであるとします。8 個のフィルターを持つ畳み込み層で、フィルター サイズが 5 x 5 の場合、フィルターあたりの重みの数は 5 * 5 * 3 = 75、層のパラメーターの総数は (75 + 1) * 8 = 608 になります。
https://jp.mathworks.com/help/deeplearning/ref/nnet.cnn.layer.convolution2dlayer.html#mw_82d3333b-e37c-43db-a119-4ebd5120afa4

convolution2dLayerで指定する「フィルターの数」(numFilters)引数も、
「フィルターあたりの重みの数は 5 * 5 * 3」(3次元目がチャネル)と記載されているように、
入力のチャネル数分のチャネルがあるフィルターが、numFilters分あるということになると思います。

投稿2022/03/03 15:33

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

32x32x3(3つのレイヤー)の入力に対して6つのフィルターを畳み込むと、28x28x6(6つのレイヤー)のテンソルに変換できる

参考
は、三つのレイヤーの入力に対して、畳み込みを行なって、二つのレイヤーに変換する場合です

参考2
は、三つのレイヤーの入力に対して、畳み込みを行なって、四つのレイヤーに変換する場合です

投稿2022/03/03 14:58

編集2022/03/03 15:05
jbpb0

総合スコア7658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問