Conv2D、MaxPooling2Dなどの畳み込みレイヤー

Kerasにおける**畳み込みレイヤー(Convolutional Layers)**は、主に画像データの処理に用いられる重要な構成要素です。ここでは代表的なレイヤーであるConv2DMaxPooling2Dについて詳しく解説します。


Conv2D(2次元畳み込みレイヤー)

概要

Conv2Dは、画像のような2次元データに対してフィルタ(カーネル)を適用して特徴マップ(feature map)を抽出するレイヤーです。エッジや模様などのローカルな特徴を検出するのに有効です。

主な引数

python
keras.layers.Conv2D( filters, kernel_size, strides=(1, 1), padding='valid', activation=None, ... )
  • filters: 畳み込みに使うフィルタ(出力チャネル)の数。これが出力のチャンネル数となります。

  • kernel_size: フィルタのサイズ(例:(3, 3))。

  • strides: フィルタを動かすステップ幅(通常は(1, 1))。

  • padding: 'valid'(パディングなし)または'same'(出力サイズを入力と同じにするようパディング)。

  • activation: 活性化関数(例:'relu')。

python
from keras.layers import Conv2D model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))

この例では、28×28のグレースケール画像に対して、3×3のフィルタを32個使って畳み込みを行い、ReLU活性化を適用しています。


MaxPooling2D(2次元最大プーリングレイヤー)

概要

MaxPooling2Dは、各特徴マップから情報を圧縮(ダウンサンプリング)することで、計算コストを削減し、過学習を防ぎます。指定したウィンドウ内の最大値を取り出します。

主な引数

python
keras.layers.MaxPooling2D( pool_size=(2, 2), strides=None, padding='valid' )
  • pool_size: プーリングに使うウィンドウのサイズ(例:(2, 2))。

  • strides: ウィンドウを動かすステップ幅。省略するとpool_sizeと同じになります。

  • padding: 'valid'(パディングなし)または'same'

python
from keras.layers import MaxPooling2D model.add(MaxPooling2D(pool_size=(2, 2)))

この例では、2×2の領域ごとに最大値を取り出すことで、出力のサイズを1/2に縮小します。


Conv2D + MaxPooling2Dの組み合わせ

一般的な畳み込みニューラルネットワーク(CNN)では、以下のように畳み込みとプーリングを交互に重ねていきます:

python
from keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D model = Sequential() model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(64, 64, 3))) model.add(MaxPooling2D(pool_size=(2, 2)))

これにより、局所特徴の抽出と空間的ダウンサンプリングを繰り返しながら、データの抽象度を高めていきます。


活性化関数との関係

Conv2Dレイヤーの出力には、活性化関数(例えばReLU)を適用して非線形性を導入することが一般的です。これにより、単なる線形変換では表現できない複雑な特徴を学習できます。


まとめ

レイヤー名 役割
Conv2D 特徴抽出(エッジ・模様など)
MaxPooling2D 特徴の圧縮・計算負荷の削減・過学習防止

これらのレイヤーは、画像認識・物体検出・医療画像解析など、多くの分野で用いられるCNNの基本構成要素です。

生成日:2025/05/22