我正在制作一个可以拍摄灰度图像并返回rgb图像的模型。现在,我将MSE用作损失函数,但我认为这不是一个好选择。在这种类型的问题中,哪种损失函数更合适?
我的模型是AutoEnconder。我正在使用以下功能来构建它:
def conv2d(layer_input, filters, f_size=3, bn=True, strides_ = 2):
d = Conv2D(filters, kernel_size=f_size, padding='same', activation='relu')(layer_input)
d = AveragePooling2D(pool_size=(2,2),strides=(2,2))(d)
d = LeakyReLU(alpha=0.2)(d)
if bn:
d = BatchNormalization(momentum=0.9)(d)
return d
def deconv2d(layer_input, skip_input, filters, f_size=4, dropout_rate=0):
u = UpSampling2D(size=2)(layer_input)
u = Conv2D(filters, kernel_size=f_size, strides=1, padding='same')(u)
u = LeakyReLU(alpha=0.2)(u)
if dropout_rate:
u = Dropout(dropout_rate)(u)
u = BatchNormalization(momentum=0.8)(u)
u = Concatenate()([u, skip_input])
return u
尽管遇到一些罕见的分类情况,但当您遇到回归问题时,MSE将主要完成该工作。
如果我正确理解了模型的目的,我相信对您来说正确的损失函数将是二进制交叉熵或分类交叉熵(用于多类分类)。
查看this Keras documentation了解更多具体信息。
更新:您可以看到此blog post,其中涵盖了AutoEncoder CNN模型。