tensorflow的reduce_sum方法学习记录

lybbb 2019-12-25

在使用tensorflow时,经常会用到reduce_sum这个函数,表示对数据进行求和,但它的参数的作用却不是那么容易明白。

reduce_sum(
    input_tensor,
    axis=None,
    keep_dims=False,
    name=None,
    reduction_indices=None
)
参数一:axis
沿着哪个维度求和。对于二维的input_tensor张量,0表示按列求和,1表示按行求和,[0, 1]表示先按列求和再按行求和。
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一起使用,不让结果降维。

********************不积跬步无以至千里********************

相关推荐