theano - 按 T.dot 之类的规则操作两个矩阵
theano - Operate Two Matrix By Rule like T.dot
我想按T.dot的规则操作两个矩阵,比如:
op( [v1, v2, v3] , [u1, u2, u3].T )
(v & u are all vectors)
和return矩阵:
[[op(v1, u1), op(v1, u2), op(v1, u3)],
[op(v2, u1), op(v2, u2), op(v2, u3)],
[op(v3, u1), op(v3, u2), op(v3, u3)]]
但是,我希望 op 是计算余弦相似度的函数,而不是两个向量之间的点。
theano中有没有函数可以做到这一点?
=======
余弦相似度函数为:
import theano.tensor as T
x = T.vector()
y = T.vector()
result, _ = T.dot(x, y) / (x.norm(2) * y.norm(2))
cosine_similarity = theano.function(inputs=[x,y], outputs=[result])
您可能应该直接对矩阵执行此操作:
定义
V = (v1, v2, v3)
U = (u1, u2, u3)
然后
import theano.tensor as T
import numpy as np
U = T.fmatrix()
V = T.fmatrix()
cos_sim = T.dot(U, V.T) / (T.sqrt((U ** 2).sum(0)) * T.sqrt((V ** 2).sum(0).reshape((-1, 1))))
u = np.arange(9.).reshape(3, 3)
cos_sim.eval({U: u.astype('float32'), V: u.astype('float32')})
我想按T.dot的规则操作两个矩阵,比如:
op( [v1, v2, v3] , [u1, u2, u3].T )
(v & u are all vectors)
和return矩阵:
[[op(v1, u1), op(v1, u2), op(v1, u3)],
[op(v2, u1), op(v2, u2), op(v2, u3)],
[op(v3, u1), op(v3, u2), op(v3, u3)]]
但是,我希望 op 是计算余弦相似度的函数,而不是两个向量之间的点。
theano中有没有函数可以做到这一点?
=======
余弦相似度函数为:
import theano.tensor as T
x = T.vector()
y = T.vector()
result, _ = T.dot(x, y) / (x.norm(2) * y.norm(2))
cosine_similarity = theano.function(inputs=[x,y], outputs=[result])
您可能应该直接对矩阵执行此操作:
定义
V = (v1, v2, v3)
U = (u1, u2, u3)
然后
import theano.tensor as T
import numpy as np
U = T.fmatrix()
V = T.fmatrix()
cos_sim = T.dot(U, V.T) / (T.sqrt((U ** 2).sum(0)) * T.sqrt((V ** 2).sum(0).reshape((-1, 1))))
u = np.arange(9.).reshape(3, 3)
cos_sim.eval({U: u.astype('float32'), V: u.astype('float32')})