Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Caffe-EuclideanLoss在Tensorflow中复制_Python_Tensorflow_Caffe_Euclidean Distance - Fatal编程技术网

Python Caffe-EuclideanLoss在Tensorflow中复制

Python Caffe-EuclideanLoss在Tensorflow中复制,python,tensorflow,caffe,euclidean-distance,Python,Tensorflow,Caffe,Euclidean Distance,我试图在Tensorflow中从Caffe复制EuclideanLoss。我发现了一个名为:tf.nn.l2_loss的函数,根据文档,该函数计算如下: output = sum(t ** 2) / 2 当查看Python版caffe中的欧几里德损失时,它说: def forward(self, bottom, top): self.diff[...] = bottom[0].data - bottom[1].data top[0].data[...] = np

我试图在
Tensorflow
中从
Caffe
复制
EuclideanLoss
。我发现了一个名为:
tf.nn.l2_loss
的函数,根据文档,该函数计算如下:

output = sum(t ** 2) / 2
当查看Python版caffe中的欧几里德损失时,它说:

def forward(self, bottom, top):
        self.diff[...] = bottom[0].data - bottom[1].data
        top[0].data[...] = np.sum(self.diff**2) / bottom[0].num / 2.
在原始文件中,它说:


对我来说,这是完全相同的计算。然而,在Tensorflow中,同一个网络的损失值约为3000,而在Caffe中,损失值约为300。那么差异在哪里呢?

tf.nn.l2_损失
在计算损失时不考虑批量大小。为了获得与caffe相同的值,您应该除以批量大小。为此,最简单的方法是使用平均值(总和/n):


我想说,您还需要除以批次大小(10?),或者更好,使用
tf.mean()
计算批次的平均损失。Hm甚至更好不是我要求的。我要求的是同样的损失@ManoloSantosIt也是同样的损失<代码>tf.减少平均值(x)/2..=tf.sum(x)/x.shape[0]/2.好的,你能回答这个问题并写下要使用的确切张量流量损失吗?我有点困惑@ManoloSantosI我100%确信这不等于caffe的欧几里德损失,因为我已经在使用这个公式了!它返回[0,1]范围内的值,因为我的基本真值范围是[0,1],这是由于均值函数。平均值返回“平均值”,而不是总和。这是不对的。你能看看这个链接@thigi吗。嗯,我认为你没有理解平均数的定义<代码>平均值(x)=(1/N)*和(x)目标(y)是否可能是向量而不是标量?在这种情况下,情况就不同了。只需求和到最后一个轴(-1)并除以批次大小,它们是这样的:
tf.placeholder(tf.float32,shape=[1,64,64,54])
。你能更新你的答案吗?
import tensorflow as tf

y_pred = tf.constant([1, 2, 3, 4], tf.float32)
y_real = tf.constant([1, 2, 4, 5], tf.float32)
mse_loss = tf.reduce_mean(tf.square(y_pred - y_real)) / 2.

sess = tf.InteractiveSession()
mse_loss.eval()