【问题标题】:Implementing MSE loss实施 MSE 损失
【发布时间】:2020-01-18 05:07:46
【问题描述】:

我是深度学习的新手,我想实现一个自动编码器。我正在使用 kerasmse 损失函数。但是当我使用我实现的 MSE 函数时,我的函数的输出和 keras.losses.mse 大致相同,但结果明显更差。

由于项目中的一些需求,我想修改 MSE。但实施后,结果的质量变得更差了。

函数的输入是两个23*32*3的ndarrays。 由于我想做的修改,我不得不进行切片。


import tensorflow as tf
import numpy as np
import keras as k

def custom_loss(im1, im2):
    im11 = im1[:, :, 0]
    im12 = im1[:, :, 1]
    im13 = im1[:, :, 2]
    im21 = im2[:,:,0]
    im22 = im2[:,:,1]
    im23 = im2[:,:,2]
    diff1 = tf.square(im11 - im21)
    diff2 = tf.square(im12 - im22)
    diff3 = tf.square(im13 - im23)
    res = tf.divide((diff1 + diff2 + diff3), 3)
    return res


但是当我测试它时,结果几乎是一样的。但是当我在模型中使用它时,结果会更糟。


a = np.random.rand(32, 32, 3)
b = np.random.rand(32, 32, 3)
v1 = tf.placeholder(tf.float32, (32, 32, 3), 'v1')
v2 = tf.placeholder(tf.float32, (32, 32, 3), 'v2')

with tf.Session() as sess:
    me = sess.run(custom_loss(v1, v2), feed_dict={v1: a, v2: b})
    true = sess.run(k.losses.mse(v1, v2), feed_dict={v1: a, v2: b})

for i in range(32):
    for j in range(32):
        print(i, j, true[i][j], me[i][j])

【问题讨论】:

    标签: python tensorflow machine-learning keras deep-learning


    【解决方案1】:

    我相信您缺少差异的总和。

    尝试:

    def custom_loss(im1, im2):
        im11 = im1[:, :, 0]
        im12 = im1[:, :, 1]
        im13 = im1[:, :, 2]
        im21 = im2[:,:,0]
        im22 = im2[:,:,1]
        im23 = im2[:,:,2]
        diff1 = (im11 - im21)**2
        diff2 = (im12 - im22)**2
        diff3 = (im13 - im23)**2
        res = tf.divide((diff1 + diff2 + diff3).sum(), 3)
        return res
    

    【讨论】:

      猜你喜欢
      • 2021-01-24
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      相关资源
      最近更新 更多