Skip to main content
 首页 » 编程设计

python之如何控制 tensorflow 中的维度广播

2025年02月15日28dflying

我想用几种方法使我的行集居中,并获得几组居中的行。

我的数据具有 (4, 3) 的形状,即四个 3D 向量:

data = tf.get_variable("myvar1", shape=[4, 3], dtype=tf.float64) 

我有两个中心(两个 3D 向量):

mu = tf.get_variable("mu", initializer=tf.constant(np.arange(2*3).reshape(2, 3), dtype=tf.float64)) 

我想每亩将数据集中一次。在 numpy 中我会写循环:

data = np.arange(4 * 3).reshape(4, 3) 
mu = np.arange(2*3).reshape(2, 3) 
 
centered_data = np.empty((2, 4, 3)) 
for i_data in range(len(data)): 
    for i_mu in range(len(mu)): 
        centered = data[i_data] - mu[i_mu] 
        centered_data[i_mu, i_data, :] = centered 

如何在 tensorflow 中做同样的事情?

numpy 的批量方法也将不胜感激!

请您参考如下方法:

显然我可以插入奇异维度来激发广播:

data = tf.get_variable("myvar1", shape=[4, 3], dtype=tf.float64) 
mu = tf.get_variable("mu", initializer=tf.constant(np.arange(2*3).reshape(2, 3), dtype=tf.float64)) 
 
centered_data = data - tf.expand_dims(mu, axis=1) 
 
with tf.Session() as sess: 
 
    sess.run(tf.global_variables_initializer()) 
 
    ans_value, centered_data_value, mu_value = sess.run([centered_data, data, mu], {data: np.arange(4 * 3).reshape(4, 3)}) 
 
    print("centered_data_value: ", centered_data_value) 
    print("mu: ", mu_value) 
    print("ans: ", ans_value) 

在numpy中也是如此:

mu = np.reshape(mu, (2, 1, 3)) 
centered_data = data - mu