我有一个简单和工作的多层感知器在Theano,有1个隐藏层和1个回归层,有2个输出。成本函数定义为均方误差函数。然而,在学习过程中,我现在想最小化两个向量之间的余弦距离,所以我想用余弦距离作为代价函数。下面是我当前实现的一些相关部分。在import theano
import theano.tensor as T
class RegressionLayer(object):
def __init__(self, input, n_in, n_out, W=None, b=None):
# rest of __init__ left out for brevity
def mse(self, y):
return T.mean(T.sqr(y - self.y_pred))
def cos(self, y):
return 1. - (T.dot(y,self.y_pred) / (T.sqrt(T.sum(T.sqr(y)) * T.sum(T.sqr(self.y_pred)))))
如果将cost函数从mse(y)更改为cos(y),则会出现以下错误:
^{pr2}$
我不明白为什么成本(函数)不是标量的。只是为了测试我试过:def cos(self, y):
T.sum(1. - (T.dot(y,self.y_pred) / (T.sqrt(T.sum(T.sqr(y)) * T.sum(T.sqr(self.y_pred))))))
然后模型就建立起来了,但是我在训练中得到了一个尺寸不匹配的问题。在ValueError: dimension mismatch in args to gemm (1,2)x(1,2)->(1,2)
我想问题是我看不出余弦距离函数和我的中误差函数有什么不同。我错过了什么?在