tf.reduce_sum()方法深度解析

首先看一下reduce_sum及其參數的注釋 :

def tf.reduce_sum(input_tensor, axis=None, keepdims=False, name=None)

Computes the sum of elements across dimensions of a tensor.

Reduces input_tensor along the dimensions given in axis. Unless keepdims is true, the rank of the tensor is reduced by 1 for each entry in axis. If keepdims is true, the reduced dimensions are retained with length 1.

If axis is None, all dimensions are reduced, and a tensor with a
single element is returned.

1 參數只有一個矩陣 input_tensor,其余參數為默認

下面我們用三個張量為例(下統一稱為矩陣),對一維向量,二維矩陣,三維矩陣分別執行其余參數為默認的reduce_sum()運算。

x_dim_1 = tf.constant([1,2,3])
z = tf.reduce_sum(x_dim_1)
print("1D sum :")
print(z)x_dim_2 = tf.constant([[1,2,3],[4,5,6]])
z = tf.reduce_sum(x_dim_2)
print("2D sum :")
print(z)x_dim_3 = tf.constant([[[1,2],[2,3],[3,4]],[[4,5],[5,6],[6,7]]])z = tf.reduce_sum(x_dim_3)
print("3D sum :")
print(z)

輸出結果如下:
在這里插入圖片描述
不難看出,無論是對幾維矩陣而言,tf.reduce_sum()方法均對矩陣的所有元素進行求和,并將結果降維至一維,返回一個數值(0維矩陣)。 在這種情況下,tf.reduce_sum()方法與我們熟悉的numpy.sum()方法可以說在矩陣運算方面別無二致,同時也符合注釋中所說 :

If axis is None, all dimensions are reduced, and a tensor with a
single element is returned.

2 保持keepdims參數為false,改變axis參數的值進行運算

這個部分就是reduce_sum的靈魂所在,其關鍵是要理解所謂axis參數對于高維矩陣的意義。
不妨先看看,如果我們打印出上述代碼中的三個矩陣常量的shape,會得到什么:

在這里插入圖片描述
需要理解的是,對于高維矩陣來說,其每一個元素都是一個低維矩陣。 例如,對于一維矩陣(數組) x_dim_1 而言,每一個元素都是一個0維的數組(數值) : 1,2,3。 對于高維矩陣,以三維矩陣x_dim_3 為例,其每一個元素都是一個二維的矩陣,這些二維矩陣中的每一個元素都是一個一維數組,這些一維數組中的每個元素都是一個0維矩陣(數值)。

聽起來好像像繞口令,那么我們就以x_dim_3為例,具體解釋axis與矩陣的shape之間的關系。
x_dim_3 = [ [ [1,2],[2,3],[3,4] ],
[ [4,5],[5,6],[6,7] ] ]

首先我們不難看出,這是一個三維矩陣。那么該矩陣包含了幾個二維矩陣的元素呢,我們不難看出包含了兩個,分別是 [ [1,2],[2,3],[3,4] ] 以及 [ [4,5],[5,6],[6,7] ] 兩個二維矩陣。那么對于每一個作為元素的二維矩陣,又包含了多少個一維數組呢,顯然,每一個二維矩陣都包含了三個一維數組。以第一個二維數組元素為例,包含了[1,2],[2,3],[3,4]三個一維數組元素。而每一個一維數組元素,又分別包含了兩個0維數組(數值)。

這就是張量 x_dim_3 的shape的構成(2,3,2),其代表的數學意義為,這個三維矩陣包含了兩個二維矩陣元素,每一個二維矩陣又包含了三個一維矩陣元素,每一個一維矩陣又包含了兩個數值。同時,三個數值分別對應了axis=0 axis=1 axis=2 三個軸分別包含的元素個數。

問題實際變成了,沿著axis=0 : 對包含的兩個二維矩陣元素進行求和, 沿著axis=1 : 對該維度包含的三個一維矩陣進行求和,沿著axis = 2 : 對該維度包含的兩個數值進行求和。 下面放出對x_dim_3的測試及輸出結果。

# 沿著axis = 0 對三維矩陣進行降維求和 實際就是對兩個二維矩陣元素進行加法運算
x_dim_3 = tf.constant([[[1,2],[2,3],[3,4]],[[4,5],[5,6],[6,7]]])
z = tf.reduce_sum(x_dim_3,axis=0)
print(z)

輸出結果如下:
在這里插入圖片描述
注釋 :
在這里插入圖片描述

# 沿著axis=1 對三維矩陣進行降維求和 
x_dim_3 = tf.constant([[[1,2],[2,3],[3,4]],[[4,5],[5,6],[6,7]]])
z = tf.reduce_sum(x_dim_3,axis=1)
print(z)

在這里插入圖片描述

# 沿著axis=2對三維矩陣進行降維求和 
x_dim_3 = tf.constant([[[1,2],[2,3],[3,4]],[[4,5],[5,6],[6,7]]])
z = tf.reduce_sum(x_dim_3,axis=2)
print(z)

在這里插入圖片描述

3 總結

reduce_sum方法人如其名,減少維度的同時對矩陣內部沿著某一軸進行求和。與之類似的方法還有reduce_max, reduce_min, reduce_mean,他們關于axis參數的使用與本篇文章中分析的是別無二致的。當然,axis可以不是一個數值,而是一個矩陣,有興趣的可以進一步探索與發現。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/386866.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386866.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386866.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

主成分分析(PCA)原理詳解_轉載

一、PCA簡介 1. 相關背景 在許多領域的研究與應用中,往往需要對反映事物的多個變量進行大量的觀測,收集大量數據以便進行分析尋找規律。多變量大樣本無疑會為研究和應用提供了豐富的信息,但也在一定程度上增加了數據采集的工作量,…

Mac cnpm裝包時提示Error: EACCES: permission denied解決辦法

Cnpm裝包時提示Error: EACCES: permission denied解決辦法 2018年03月04日 09:31:51 miniminixu 閱讀數:1598 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/miniminixu/article/details/79434609 只需在cnpm …

特征點檢測 FAST算法及代碼詳解

本文著重介紹了用于圖像特征點檢測的算法,FAST算法,以及使用matlab的實現。 FAST算法是一種拐點檢測算法,其主要應用于提取圖像中的特征點,在動態成像的一系列圖像中追蹤定位對象。眾所周知,我們生活的世界是動態化的…

Python Email發送,通知業務完成

Email 發送 #!/usr/bin/python # -*- coding: UTF-8 -*- import base64 import smtplib from email.mime.text import MIMEText from email.header import Header from email.utils import formataddrdef crypt(source, key):from itertools import cycleresulttempcycle(key)f…

基于SpringCloud的分布式事務框架(LCN)

框架特點 支持各種基于spring的db框架 兼容springcloud、dubbo 使用簡單,代碼完全開源 基于切面的強一致性事務框架 高可用,模塊可以依賴dubbo或springcloud的集群方式做集群化,TxManager也可以做集群化 使用示例 分布式事務發起方&#xf…

一文看懂計算機神經網絡與梯度下降

1. 計算機神經網絡與神經元 要理解神經網絡中的梯度下降算法,首先我們必須清楚神經元的定義。如下圖所示,每一個神經元可以由關系式yf(∑i1nwixib)y f(\sum_{i1}^nw_ix_i b)yf(∑i1n?wi?xi?b)來描述,其中X[x1,x2,...,xn]X [x_1,x_2,..…

vs2015web項目無法加載64位c++的dll,提示試圖加載不正確的格式

vs2015無法加載64位c的dll,提示試圖加載不正確的格式! 開始用winform引用64位的c的dll,在項目的屬性設置生成里面選擇any cpu或者x64都可以成功! 但在web項目和接口里面運行就提示試圖加載不正確的格式,想辦法找了一天也沒處理掉&…

使用Rancher搭建K8S測試環境

環境準備(4臺主機,Ubuntu16.04Docker1.12.6 SSH): rancher1 192.168.3.160 只做管理節點 node1 192.168.3.161 K8S的節點1 node2 192.168.3.162 K8S的節點2 node3 192.168.3.163 K8S的節點3 此時如…

Anaconda安裝tensorflow報錯問題解決方法

最近脫離了googlecolab想使用本地的anaconda進行機器學習課題的演練,在安裝tensorflow時報錯 : UnsatisfiableError: The following specifications were found。下面給出解決方法。 發現實際原因是由于anaconda的python環境,當前版本的tensorflow只能適…

5.07—018—周二

今日所學內容 一、模塊 二、遞歸刪除的思路 三、案例:跨文件夾移動文件 四、案例 遞歸遍歷打印目標路徑中所有的txt文件 五、項目開放周期 一、模塊 1、與時間相關的模塊 1)time :時間 時間戳(timestamp):time.time()  延遲線程…

機器學習模型中step與epoch,batch_size之間的關系

本文主要談談自己對step,epoch,batch_size這幾個常見參數的理解。 最近在調試模型的時候,發現在使用keras.optimizer.adam時,模型在添加了新的一層2D卷積層后難以收斂,在不調整初始權重矩陣的情況下,想通過…

yml的mybatis的sql查看

yml的mybatis的sql查看 控制臺輸出結果:

Debian 安裝 yum

sudo apt-get updatesudo apt-get install build-essentialsudo apt-get install yum轉載于:https://www.cnblogs.com/baiqian/p/10840169.html

unity如何讓canvas總是顯示在所有層的最上方?

由于unity中的圖層都是從上至下渲染的,那么在渲染的過程中,只需要將canvas所在的UI層的渲染優先級order排在其他層之后,就可以保證UI畫面總是最后加載出來的了。 在canvas的inspector中修改order in layer 或者 sorting layer都可以實現這一…

FZU - 2037 -Maximum Value Problem(規律題)

Let’s start with a very classical problem. Given an array a[1…n] of positive numbers, if the value of each element in the array is distinct, how to find the maximum element in this array? You may write down the following pseudo code to solve this proble…

解決Feign接口調用有時候不好用的分析思路

很多架構師為了鑒權,會把controller帶過來的header信息一股腦的利用feign的攔截器帶入RequestTemplate,然后方便feign接口鑒權。這時候可能會帶入其他的header信息,比如content-type,而有的feign接口是對特定對header信息有要求的…

關于同時可用git命令clone和TortoiseGit拉取代碼不需要密碼

工作需要在windows7下使用git分布式版本控制系統,需要同時可以在git命令行模式或TortoiseGit拉取代碼而不需要每次輸入密碼。 這時候需要同時安裝git和TortoiseGit。 git使用命令ssh-keygen -C “郵箱地址” -t rsa產生的密鑰在TortoiseGit中不能用。TortoiseGit 使…

交叉驗證 cross validation 與 K-fold Cross Validation K折疊驗證

交叉驗證,cross validation是機器學習中非常常見的驗證模型魯棒性的方法。其最主要原理是將數據集的一部分分離出來作為驗證集,剩余的用于模型的訓練,稱為訓練集。模型通過訓練集來最優化其內部參數權重,再在驗證集上檢驗其表現。…

這個太有意思了,程序員可以消遣娛樂

/***        ┏┓ ┏┓ *       ┏┛┻━━━━━━━┛┻┓ *       ┃       ┃*       ┃   ━   ┃ *       █████━█████ ┃*       ┃       ┃ *       ┃   ┻   ┃* …

第十一周總結

這個作業屬于那個課程 C語言程序設計II 這個作業要求在哪里 https://edu.cnblogs.com/campus/zswxy/computer-scienceclass4-2018/homework/3203 我在這個課程的目標是 理解與使用遞歸函數。 參考文獻 基礎題 2-1 宏定義“#define DIV(a, b) a/b”,經DIV(x …