首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实施MSE损失

实施MSE损失
EN

Stack Overflow用户
提问于 2019-09-17 10:36:57
回答 1查看 151关注 0票数 0

我刚开始深入学习,我想实现一个自动编码器。我使用的是kerasmse损失函数。但是,当我使用我实现的MSE函数时,我的函数和keras.losses.mse的输出大致相同,但结果要差得多。

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

这个函数的输入是两个23*32*3 ndarray。我不得不做切片,因为我想做的修改。

代码语言:javascript
复制
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

但是当我测试的时候,结果几乎是一样的。但是当我在模型中使用它时,结果要糟糕得多。

代码语言:javascript
复制
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])
EN

回答 1

Stack Overflow用户

发布于 2019-09-17 11:02:21

我相信你错过了差异的总结。

尝试:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57972482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档