如何控制张量流中的维度广播?

时间:2017-10-02 16:00:51

标签: python numpy multidimensional-array tensorflow

我想用几种方法将我的行集中在一起,并得到几组居中的行。

我的数据形状为(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的批量方法也将受到赞赏!

2 个答案:

答案 0 :(得分:1)

显然我可以插入单一维度来激发广播:

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

同样是numpy:

.glyphicon {
  position: relative;
  top: 1px;
  display: inline-block;
  font-family: 'Glyphicons Halflings';
  font-style: normal;
  font-weight: normal;
  line-height: 1;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

答案 1 :(得分:0)

您只需要使用-tf.substract它将执行元素操作:

centered_data = tf.substract(data, mu)