2017-10-10 7 views
1

私は、私のunet-like CNNの結果を数値的に評価する方法を探しています。unet-like CNNの結果を数値的に評価する方法は?

CNNは、グレースケール画像からアーチファクトを除去するように訓練されています。したがって、CNNは、各チャンネルにアーティファクトを含む "9チャンネル"のグレースケール画像を得る(部分的に冗長なデータを有する9つのグレースケール画像であるが、異なるアーチファクトが連結される - >次元[numTrainInputs、512,512,9])。アーティファクトなしのグレースケール画像[numTrainInputs、512、512、1]。 CNNは、MSEを損失関数として、アダムをオプティマイザおよびケラスとして訓練する。ここまでは順調ですね。

視覚的にCNNは、アーチファクトのない「グラウンドトゥルース」画像 - > dimensions [numTrainInputs、512、512、1]と比較して良好な結果を示しますが、トレーニング中の精度は0%のままです。私はこれが結果画像のどれもが地上の真理に完全に適合しないからだと思うよ、そうだよ!

しかし、どのように数値結果を評価できますか?私はオートエンコーダーの分野でいくつかの数値評価を探しましたが、適切な方法を見つけられませんでした。誰かが私にヒントを与えることができますか? CNNはこのようになります

input_1 = Input((X_train.shape[1],X_train.shape[2], X_train.shape[3])) 

conv1 = Conv2D(16, (3,3), strides=(2,2), activation='elu', use_bias=True, padding='same')(input_1) 
conv2 = Conv2D(32, (3,3), strides=(2,2), activation='elu', use_bias=True, padding='same')(conv1) 
conv3 = Conv2D(64, (3,3), strides=(2,2), activation='elu', use_bias=True, padding='same')(conv2) 
conv4 = Conv2D(128, (3,3), strides=(2,2), activation='elu', use_bias=True, padding='same')(conv3) 
conv5 = Conv2D(256, (3,3), strides=(2,2), activation='elu', use_bias=True, padding='same')(conv4) 
conv6 = Conv2D(512, (3,3), strides=(2,2), activation='elu', use_bias=True, padding='same')(conv5) 

upconv1 = Conv2DTranspose(256, (3,3), strides=(1,1), activation='elu', use_bias=True, padding='same')(conv6) 
upconv2 = Conv2DTranspose(128, (3,3), strides=(2,2), activation='elu', use_bias=True, padding='same')(upconv1) 
upconv3 = Conv2DTranspose(64, (3,3), strides=(2,2), activation='elu', use_bias=True, padding='same')(upconv2) 
upconv3_1 = concatenate([upconv3, conv4], axis=3) 

upconv4 = Conv2DTranspose(32, (3,3), strides=(2,2), activation='elu', use_bias=True, padding='same')(upconv3_1) 
upconv4_1 = concatenate([upconv4, conv3], axis=3) 

upconv5 = Conv2DTranspose(16, (3,3), strides=(2,2), activation='elu', use_bias=True, padding='same')(upconv4_1) 
upconv5_1 = concatenate([upconv5,conv2], axis=3) 

upconv6 = Conv2DTranspose(8, (3,3), strides=(2,2), activation='elu', use_bias=True, padding='same')(upconv5_1) 
upconv6_1 = concatenate([upconv6,conv1], axis=3) 

upconv7 = Conv2DTranspose(1, (3,3), strides=(2,2), activation='linear', use_bias=True, padding='same')(upconv6_1) 

model = Model(outputs=upconv7, inputs=input_1) 



model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy']) 
model.fit(X_train, Y_train, batch_size=1, epochs=100, shuffle=True, validation_split=0.01, callbacks=[tbCallback]) 

あなたの助けをありがとうございました!

答えて

1

この問題に対して間違ったメトリックを使用しています。 回帰では、メトリックとして「精度」は意味をなさない。例えばMSEに変更し :

model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mean_squared_error'])) 
+0

は、メトリック損失関数としてMSEを使用する意味を作ってもエラーとしていますか?同じことを二度言っているのではないですか? –

+0

回帰ではこれは問題ありません。別の尺度が必要な場合は、SSIMにフィルタリングされたノイズのない画像との類似度をさらに評価するように試みることができます。 – maz

関連する問題