Deep learning 如何从数值上评估像CNN这样的unet的结果?

Deep learning 如何从数值上评估像CNN这样的unet的结果?,deep-learning,keras,conv-neural-network,evaluation,Deep Learning,Keras,Conv Neural Network,Evaluation,我正在寻找一种方法,以数字评估我的联合国新闻网的结果,如有线电视新闻网 CNN经过训练,可以从灰度图像中去除伪影。因此,CNN获得一个“9通道”灰度图像,该图像包含每个通道中的伪影(9个带有部分冗余数据但不同伪影的灰度图像串联-->维度[numTrainInputs,512,512,9]),作为输入,并应输出一个没有伪影的灰度图像[numTrainInputs,512,512,1]。CNN使用MSE作为损失函数,Adam作为优化器和Keras进行训练。到目前为止,一切顺利 与无伪影的“地面真实”

我正在寻找一种方法,以数字评估我的联合国新闻网的结果,如有线电视新闻网

CNN经过训练,可以从灰度图像中去除伪影。因此,CNN获得一个“9通道”灰度图像,该图像包含每个通道中的伪影(9个带有部分冗余数据但不同伪影的灰度图像串联-->维度[numTrainInputs,512,512,9]),作为输入,并应输出一个没有伪影的灰度图像[numTrainInputs,512,512,1]。CNN使用MSE作为损失函数,Adam作为优化器和Keras进行训练。到目前为止,一切顺利

与无伪影的“地面真实”图像-->维度[numTrainInputs,512,512,1]相比,CNN在视觉上提供了良好的结果,但训练期间的准确度仍保持在0%。我认为这是因为没有一张结果图像完全符合事实,对吧

但我如何从数字上评估结果呢?我在自动编码器领域寻找了一些数值计算,但没有找到合适的方法。有人能给我一个提示吗

美国有线电视新闻网是这样的:

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])

非常感谢你的帮助

您对此问题使用了错误的度量标准。 在回归中,作为度量的“准确性”毫无意义。 将其更改为MSE,例如:

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

使用MSE作为损失函数和误差度量有意义吗?这不是说同一件事两次吗?在回归中,这很好。如果您想要一个不同的度量,您可以尝试SSIM来进一步评估过滤后的图像与无噪图像的相似程度。