tensorflow的reduce_sum方法学习记录

在使用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一起使用,不让结果降维。

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

原文地址:https://www.cnblogs.com/liangxiyang/p/12096826.html

时间: 2024-10-22 18:34:31

tensorflow的reduce_sum方法学习记录的相关文章

SVN的忽略和只读使用方法学习记录

前言,先扯几句.最近学了GIT,虽然很肤浅,但是也算是用上了分布式版本管理控制系统.Linus很牛,他也很厌烦SVN,而我看这些都是工具,是否拿来使用主要看是否顺手.我赞同分布式版本管理控制,它有诸多优点,但是对于在局域网中做项目的封闭式开发或者项目很小且本机就能搭建SVN服务器,这两种情况来使用SVN也无可厚非.至于神人Linus他做的Linux系统源码太庞大,而且项目源码数据量大,这个对于SVN还是不太适用.准备进入公司新项目开发阶段了,有同事在外地分公司工作,因此代码版本管理尤为重要.之前

java中equals与hashCode还有tostring方法学习记录

package javas.fristdome01; import org.testng.annotations.Test; class Person { private String name; private int age; Person() { } Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void s

Python学习记录day6

Python学习记录day6 学习 python Python学习记录day6 1.反射 2.常用模块 2.1 sys 2.2 os 2.3 hashlib 2.3 re 1.反射 反射:利用字符串的形式去对象(默认)中操作(寻找)成员 cat commons.py #!/usr/bin/env python#_*_coding:utf-8_*_''' * Created on 2016/12/3 21:54. * @author: Chinge_Yang.''' def login(): pr

Java 静态内部类与非静态内部类 学习记录.

目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合,我并不是很清楚,留下一些值得思考的问题作为记录,说不定以后能自己来填.于是就会有这篇文章啦. 常规使用方法我也不想介绍,网上一大把,我就说说比较容易错的,值得注意的地方. 注意 这篇文章只是分享一下我对内部类的一些研究与困惑吧,说不定对大家有帮助,说不定能引导大家一起思考学习.Java语法知识其实

libgdx学习记录19——图片动态打包PixmapPacker

libgdx中,opengl 1.x要求图片长宽必须为2的整次幂,一般有如下解决方法 1. 将opengl 1.x改为opengl 2.0.(libgdx 1.0版本后不支持1.x,当然不存在这个问题,这里针对的是0.9.9版本) 2. 使用TexturePacker将图片打包好然后作成一张大图添加进来. 第二种方法是常用方法,但是不太灵活,添加.删除某些图片不太方便,改动较大.这里可以考虑使用PixmapPacker将图片进行动态打包. 主要方法: pack(String name, Pixm

Asp.Net MVC学习记录之“一个实体对象不能由多个 IEntityChangeTracker 实例引用”

原文:浅谈 js 正则之 test 方法 其实我很少用这个,所以之前一直没注意这个问题,自从落叶那厮写了个变态的测试我才去看了下这东西.先来看个东西吧. ? 1 2 3 4 5 var re = /\d/; console.log( re.test("1") ); console.log( re.test("1") ); console.log( re.test("1") ); console.log( re.test("1"

java学习记录(2):JMenuBar

1.在用这个时候发现很多的组件都有J的前缀,例如Button和JButton,前者是awt包的,后者是swing包的,两者耳朵区别是: AWT 是Abstract Window ToolKit (抽象窗口工具包)的缩写,这个工具包提供了一套与本地图形界面进行交互的接口.AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系,我们把它称为peers. 也就是说,当我们利用 AWT 来构件图形用户界面的时候,我们实际上是在利用操作系统所提供的图形库.由于不同操作系统的图形库所提供的功能

ios学习记录 day41 UI17 多线程

CPU(工厂) 进程(车间) 线程(工人) 一个进程代表一个应用程序 CPU总是运行一个进程,其它进程处于非运行状态.一个进程可以包含多个线程.线程与线程之间可以共享进程的内存区域. 打开一个应用程序,系统会给我们创建一个线程,称为主线程 管理主界面的UI与内部循环机制(与界面相关的东西必须放在主线程中!!!) 压力比较大且会造成线程阻塞(界面卡),因此我们通过创建子线程来对主线程进行分压. 什么时候用多线程 1.网络请求(同步的) 2.文件读写(少) 3.大数据计算(冒泡) 4.数据库sele

【学习记录】关于makefile而进行的互联网学习技巧练习及学习笔记和学习心得记录(vs2010)

我也不知道作为一个完全的windows平台下的不怎么专业的软件工程学生,看到<Accelerated C++>的源代码,第一反应是:哦!我应该用make生成工程文件.然后我愉快的用AOL开始搜索相关资料. 然并卵!我一定是被什么奇怪的生物附身了.我应该直接用vs创建项目->导入文件.然后……ctrl+F5.多么完美. 可是……以下: [教程]来自于云风大大的blog(云风的 BLOG) IDE 不是程序员的唯一选择(一) 以及后面的(二)(三)(四) 以及大大写了一篇半,只为了说明用cl