2017-10-10 72 views
1

我正在尋找一種方法來數值評估我的無類CNN的結果。如何數值評估類似於unet的CNN的結果?

CNN的訓練是從灰度圖像中去除僞像。因此,CNN獲得包含每個通道中的僞像的「9通道」灰度圖像(具有部分冗餘數據但是不同僞影連接 - >尺寸[numTrainInputs,512,512,9]的9個灰度圖像)作爲輸入並且應該輸出單個沒有工件的灰度圖像[numTrainInputs,512,512,1]。 CNN的訓練使用MSE作爲損失函數,Adam作爲Optimizer和Keras。到現在爲止還挺好。

視覺CNN提供良好的結果時,與免費的「地面實況」圖像 - 維度[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