我试图定义tensorflow自定义运算,其中在一个点,我需要建立一个矩阵(z),将包含对两个矩阵(行的所有组合的资金x和y)。一般情况下,行数x和y有动力。
z
x
y
在numpy中,它非常简单:
import numpy as np from itertools import product rows_x = 4 rows_y = 2 dim = 2 x = np.arange(dim*rows_x).reshape(rows_x, dim) y = np.arange(dim*rows_y).reshape(rows_y, dim) print('x:\n{},\ny:\n{}\n'.format(x, y)) z = np.zeros((rows_x*rows_y, dim)) print('for loop:') for i, (x_id, y_id) in enumerate(product(range(rows_x), range(rows_y))): print('row {}: {} + {}'.format(i, x[x_id, ], y[y_id, ])) z[i, ] = x[x_id, ] + y[y_id, ] print('\nz:\n{}'.format(z))
返回:
x: [[0 1] [2 3] [4 5] [6 7]], y: [[0 1] [2 3]] for loop: row 0: [0 1] + [0 1] row 1: [0 1] + [2 3] row 2: [2 3] + [0 1] row 3: [2 3] + [2 3] row 4: [4 5] + [0 1] row 5: [4 5] + [2 3] row 6: [6 7] + [0 1] row 7: [6 7] + [2 3] z: [[ 0. 2.] [ 2. 4.] [ 2. 4.] [ 4. 6.] [ 4. 6.] [ 6. 8.] [ 6. 8.] [ 8. 10.]]
但是,我不知道如何在张量流中实现任何类似的东西。
我主要研究SO和tensorflow API,希望找到一个可以产生两个张量元素组合的函数,或者一个可以给一个张量元素排列的函数,但无济于事。
任何建议都是最欢迎的。
您可以简单地使用张量流的广播功能。
import tensorflow as tf x = tf.constant([[0, 1],[2, 3],[4, 5],[6, 7]], dtype=tf.float32) y = tf.constant([[0, 1],[2, 3]], dtype=tf.float32) x_ = tf.expand_dims(x, 0) y_ = tf.expand_dims(y, 1) z = tf.reshape(tf.add(x_, y_), [-1, 2]) # or more succinctly z = tf.reshape(x[None] + y[:, None], [-1, 2]) sess = tf.Session() sess.run(z)