使用Theano在均方误差成本函数中应用条件

时间:2017-04-27 19:43:37

标签: python machine-learning deep-learning theano mean-square-error

我正在构建一个卷积神经网络,并且我使用均方误差作为代价函数。当网络输出超过1时,我将成本函数更改为没有错误,因此当它更大时我将阈值设置为1。使用此代码

 def MSE2(self, y):

        loc = np.where(y == 1)[0]
        for i in range(len(loc)):
            if self.input2[loc[i]] > 1:
                self.input2[loc[i]] = 1

        return T.mean((y - self.input2) ** 2)

我想知道theano梯度函数在计算渐变时是否考虑到这一点,或者我应该更改其他内容。

除此之外,还有其他方法可以优化此代码以更快地运行或者可能在GPU上运行。

2 个答案:

答案 0 :(得分:0)

您可以使用 T。clip(self.input2,minimum_value,1),它会剪切多个值并将它们设置为1。不需要循环。

答案 1 :(得分:0)

因此,我发现解决此问题的最佳方法是

def MSE2(self, y):
    loc = T.eq(y,1).nonezeros()[0]
    S = T.clip(self.input2[loc],0,1)
    self.input2 = T.set_subtensor(self.input2[loc], S)
    return T.mean((y - self.input2) ** 2)

我已经测试了结果和渐变。