Python 实现MSE损耗
我刚开始深入学习,我想实现一个自动编码器。我正在使用keras和mse损失函数。但当我使用我实现的MSE函数时,我的函数和keras.loss.MSE的输出大致相同,但结果明显更糟 由于项目中的一些需要,我想修改MSE。但实施后,结果的质量变得更差 该函数的输入为两个23*32*3 nArray。 由于我想做的修改,我不得不做切片Python 实现MSE损耗,python,tensorflow,machine-learning,keras,deep-learning,Python,Tensorflow,Machine Learning,Keras,Deep Learning,我刚开始深入学习,我想实现一个自动编码器。我正在使用keras和mse损失函数。但当我使用我实现的MSE函数时,我的函数和keras.loss.MSE的输出大致相同,但结果明显更糟 由于项目中的一些需要,我想修改MSE。但实施后,结果的质量变得更差 该函数的输入为两个23*32*3 nArray。 由于我想做的修改,我不得不做切片 导入tensorflow作为tf 将numpy作为np导入 进口干酪作为k def自定义_损失(im1、im2): im11=im1[:,:,0] im12=im1
导入tensorflow作为tf
将numpy作为np导入
进口干酪作为k
def自定义_损失(im1、im2):
im11=im1[:,:,0]
im12=im1[:,:,1]
im13=im1[:,:,2]
im21=im2[:,:,0]
im22=im2[:,:,1]
im23=im2[:,:,2]
diff1=tf.平方(im11-im21)
diff2=tf.平方(im12-im22)
diff3=tf.平方(im13-im23)
res=tf.divide((diff1+diff2+diff3),3)
返回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')
使用tf.Session()作为sess:
me=sess.run(自定义丢失(v1,v2),提要dict={v1:a,v2:b})
true=sess.run(k.loss.mse(v1,v2),feed_dict={v1:a,v2:b})
对于范围(32)内的i:
对于范围(32)内的j:
打印(i,j,真[i][j],我[i][j])
我认为您缺少差异的求和
尝试:
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