使用 Theano 在均方误差成本函数中应用条件
Applying condition in mean squared error cost function using Theano
我正在构建一个卷积神经网络,我使用均方误差作为成本函数。当网络输出超过 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 上。
您可以使用 T.clip(self.input2, minimum_value, 1) 它将裁剪多个值并设置它们到一个。不需要循环。
所以我发现解决这个问题的最好方法是
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)
我已经测试了结果和梯度。
我正在构建一个卷积神经网络,我使用均方误差作为成本函数。当网络输出超过 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 上。
您可以使用 T.clip(self.input2, minimum_value, 1) 它将裁剪多个值并设置它们到一个。不需要循环。
所以我发现解决这个问题的最好方法是
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)
我已经测试了结果和梯度。