画像の解釈については、CrossValidationで同様の質問をしました。詳細な質問をここに移動して、コードの詳細をいくつか含めます。
私が得ている結果は完全に望ましいものではありません。以前にこの問題に直面したことがあるかもしれません。
完全畳み込みニューラルネットワーク「全結合部分なし」です。
トレーニングパート
最初に、畳み込み関数に一致するように画像が転置されます。(batch_no,img_channels,width,height)
input.transpose(0, 3, 1, 2)
学習率を使用して最適化された学習: 3e-6、Hu_uniform 初期化、およびこの収束までの 500 エポックのネストローブ。
- 訓練費用: 1.602449
- トレーニングロス: 4.610442
- 検証エラー: 5.126761
- テスト損失: 5.885714
後方部
画像を読み込んでいます
jpgfile = np.array(Image.open(join(testing_folder,img_name)))
1バッチに整形
batch = jpgfile.reshape(1, jpgfile.shape[0], jpgfile.shape[1], 3)
モデルを実行して、Relu を使用してアクティブ化した後、最初の特徴マップを抽出します
output = classifier.layer0.output
Test_model = theano.function(
inputs=[x],
outputs=output,
)
layer_Fmaps = Test_model(test_set_x)
バックワーク モデルを適用して、活性化されたニューロンのみを使用して画像を再構築します
bch, ch, row, col = layer_Fmaps.shape
output_grad_reshaped = layer_Fmaps.reshape((-1, 1, row, col))
output_grad_reshaped = output_grad_reshaped[0].reshape(1,1,row,col)
input_shape = (1, 3, 226, 226)
W = classifier.layer0.W.get_value()[0].reshape(1,3,7,7)
kernel = theano.shared(W)
inp = T.tensor4('inp')
deconv_out = T.nnet.abstract_conv.conv2d_grad_wrt_inputs(
output_grad = inp,
filters=kernel,
input_shape= input_shape,
filter_shape=(1,3,7,7),
border_mode=(0,0),
subsample=(1,1)
)
f = theano.function(
inputs = [inp],
outputs= deconv_out)
f_out = f(output_grad_reshaped)
deconved_relu = T.nnet.relu(f_out)[0].transpose(1,2,0)
deconved = f_out[0].transpose(1,2,0)
ここでは、2 つの画像の結果が得られます。1 つ目はアクティベーションなしの転置画像で、2 つ目はカーネルが負の重みを持つ可能性があるため、relu を使用したものです。
転置畳み込み画像から、このカーネルがこの画像に関連するいくつかの有用な特徴を検出することを学習していることは明らかです。しかし、再構成部分は、転置畳み込み中に画像の配色を壊しています。ピクセル値が小さな浮動小数点数であることが原因である可能性があります。ここで問題がどこにあるかわかりますか?