明確化した後、これが私の答えです。
あなたが解決しようとしている問題は、サイズ (10,3,1) の 2D グレースケール画像をサイズ (12,10,1) の 2D グレースケール画像に変換するニューラル ネットワークのようです。
2D グレースケール イメージは、余分な軸が 1 に設定された 2D マトリックスに他なりません。
a = np.array([[0,1,0],
[1,0,1],
[0,1,0]])
a.shape
#OUTPUT = (3,3)
a.reshape((3,3,1)) #reshape to 3,3,1
#OUTPUT -
#array([[[0],
# [1],
# [0]],
#
# [[1],
# [0],
# [1]],
#
# [[0],
# [1],
# [0]]])
したがって、(10,3) の 2D 行列は、単一チャネル (10,3,1) の 3D 画像と呼ぶことができます。これにより、畳み込みを入力に適切に適用できます。
この部分が明確であれば、ネットワークの順方向計算では、1 と 0 の空間位置を確実に捉えたいので、畳み込み層を使用します。ここで高密度レイヤーを使用することは正しい手順ではありません。
ただし、一連の畳み込み操作はDownsample
イメージに役立ちます。出力 2D マトリックス (グレー スケール イメージ) が必要なので、それも必要ですUpsample
。このようなネットワークは Deconv ネットワークと呼ばれます。
最初の一連のレイヤーは、入力を畳み込み、それらをチャネルのベクトルに「平坦化」します。次のレイヤー セットでは、2D Conv Transpose 操作を使用して、チャネルを 2D マトリックスに戻します (グレー スケール イメージ)。
この画像を参照してください -
deconv ネットを使用して (10,3,1) 画像を (12,10,1) 画像にする方法を示すサンプル コードを次に示します。
from tensorflow.keras import layers, Model
inp = layers.Input((10,3,1)) ##
x = layers.Conv2D(2, (2,2))(inp) ## Convolution part
x = layers.Conv2D(4, (2,2))(x) ##
x = layers.Conv2DTranspose(4, (3,4))(x) ##
x = layers.Conv2DTranspose(2, (2,4))(x) ## Deconvolution part
out = layers.Conv2DTranspose(1, (2,4))(x) ##
model = Model(inp, out)
model.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_33 (InputLayer) [(None, 10, 3, 1)] 0
_________________________________________________________________
conv2d_49 (Conv2D) (None, 9, 2, 2) 10
_________________________________________________________________
conv2d_50 (Conv2D) (None, 8, 1, 4) 36
_________________________________________________________________
conv2d_transpose_46 (Conv2DT (None, 10, 4, 4) 196
_________________________________________________________________
conv2d_transpose_47 (Conv2DT (None, 11, 7, 2) 66
_________________________________________________________________
conv2d_transpose_48 (Conv2DT (None, 12, 10, 1) 17
=================================================================
Total params: 325
Trainable params: 325
Non-trainable params: 0
_________________________________________________________________
明らかに、アクティベーション、ドロップアウト、プーリング レイヤーなどを自由に追加してください。上記のコードは、ダウンサンプリングとアップサンプリングを使用して、特定のシングル チャネル イメージから別のシングル チャネル イメージを取得する方法を示しています。
余談ですが、CNN がどのように機能するかを理解するために、少し時間を費やすことをお勧めします。Deconv ネットは複雑であり、2D CNN がどのように機能するかを正しく理解する前に、それらに関連する問題を解決している場合、特にこのドメインを学び始めている場合は、いくつかの基本的な問題が発生する可能性があります。