lybbb 2019-12-25
在使用tensorflow时,经常会用到reduce_sum这个函数,表示对数据进行求和,但它的参数的作用却不是那么容易明白。
reduce_sum( input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None )
x = np.asarray([[1, 1, 1], [1, 1, 1]]) x_p = tf.placeholder(tf.int32, [2, 3]) y = tf.reduce_sum(x_p, axis=0) with tf.Session() as sess: output = sess.run(y, feed_dict={x_p: x}) print(output)
输出结果如下:[2 2 2],每一个元素是之前一列元素的和。
若axis=1,则输出是:[3,3];若axis=[0,1],则输出是: 6
参数二:keep_dims
默认值为Flase,表示默认要降维。若设为True,则不降维。
从上面的例子中,可以看到,x是一个二维数组,求和后变成了一位数组,默认降了维度,这是因为keep_dims参数默认Flase,表示降维,若想让结果仍为二维的,可以将keep_dims设置为True
修改上面代码如下:
x = np.asarray([[1, 1, 1], [1, 1, 1]]) x_p = tf.placeholder(tf.int32, [2, 3]) y = tf.reduce_sum(x_p, axis=0, keep_dims=True) with tf.Session() as sess: output = sess.run(y, feed_dict={x_p: x}) print(output)
输出结果是:[[2 2 2]], 若将axis设置为1, 输出结果为:[ [3] [3] ]
参数三:reduction_indice
默认值是None,即把input_tensor降到 0维,也就是一个数。对于2维input_tensor,reduction_indices=0时,按列;reduction_indices=1时,按行。注意,reduction_indices与axis不能同时设置。
x = np.asarray([[1, 1, 1], [1, 1, 1]]) x_p = tf.placeholder(tf.int32, [2, 3]) y = tf.reduce_sum(x_p,) with tf.Session() as sess: output = sess.run(y, feed_dict={x_p: x}) print(output)
由于上面的代码没有设置reduction_indice,默认降到0维,输出:6
x = np.asarray([[1, 1, 1], [1, 1, 1]]) x_p = tf.placeholder(tf.int32, [2, 3]) y = tf.reduce_sum(x_p,reduction_indices=[1]) with tf.Session() as sess: output = sess.run(y, feed_dict={x_p: x}) print(output)
设置reduction_indices为1,输出是:[3 3], 设置reduction_indices为0,输出是:[2 2 2]。reduction_indices也可以像axis那样配合keep_dims一起使用,不让结果降维。
********************不积跬步无以至千里********************