2015-11-22 31 views
9

Trong tensorflow, có chức năng tốt cho phép nhân và ma trận, nhưng sau khi xem qua tài liệu, tôi không thể tìm thấy bất kỳ chức năng nội bộ nào để lấy sản phẩm ngoài của hai tensor. bởi tất cả các sản phẩm có thể có của các yếu tố của tensors nhỏ hơn (như numpy.outer):Sản phẩm ngoài trong tensorflow

v_{i,j} = x_i*h_j 

hoặc

M_{ij,kl} = A_{ij}*B_{kl} 

Liệu tensorflow có một chức năng như vậy?

Trả lời

15

Có, bạn có thể làm điều này bằng cách tận dụng các ngữ nghĩa phát sóng của lưu lượng. Kích thước đầu tiên là kích thước 1xN của chính nó, và thứ hai để kích thước Mx1 của chính nó, và bạn sẽ nhận được một phát sóng đến MxN của tất cả các kết quả khi bạn nhân chúng.

(Bạn có thể chơi xung quanh với những điều tương tự trong NumPy để xem cách ứng xử trong một bối cảnh đơn giản hơn, btw:

a = np.array([1, 2, 3, 4, 5]).reshape([5,1]) 
b = np.array([6, 7, 8, 9, 10]).reshape([1,5]) 
a*b 

Làm thế nào chính xác bạn làm điều đó trong tensorflow phụ thuộc một chút trên đó trục bạn muốn sử dụng và những gì ngữ nghĩa bạn muốn cho các nhân kết quả, nhưng ý tưởng chung được áp dụng.

1

trong tình cờ khác trường hợp ai đó trên này, theo các tài liệu tensorflow bạn có thể sử dụng tf.einsum() chức năng để tính toán sản phẩm bên ngoài của hai tensors ab:

# Outer product 
>>> einsum('i,j->ij', u, v) # output[i,j] = u[i]*v[j] 
Các vấn đề liên quan