1. 程式人生 > >【筆記】【Pytorch】關於torch.matmul和torch.bmm的輸出tensor數值不一致問題

【筆記】【Pytorch】關於torch.matmul和torch.bmm的輸出tensor數值不一致問題

發現

對於torch.matmul和torch.bmm,都能實現對於batch的矩陣乘法:

a = torch.rand((2,3,10))
b = torch.rand((2,2,10))
### matmal()
res1 = torch.matmul(a,b.transpose(1,2))
print res1 
"""
...
[torch.FloatTensor of size 2x3x2]
"""
### bmm()
res2 = torch.bmm(a,b.transpose(1,2))
print res2 
"""
...
[torch.FloatTensor of size 2x3x2]
"""

從打印出來的幾位數字來看,嗯,是一樣的,但是在用等式(或者torch.eq())檢查是卻發現了問題,竟然有很多不一樣的元素

print torch.eq(res1,res2)
"""
(0 ,.,.) = 
  1  0
  1  1
  1  1

(1 ,.,.) = 
  0  1
  1  1
  1  1
[torch.ByteTensor of size 2x3x2]
"""

將一樣的數值在ipython直接輸出(print會截斷位數)

>>>res1[0,0,0]
2.229752540588379
>>>res2[0,0,0]
2.229752540588379

再來看看不一樣的

>>>res1[0,0,1]
3.035151720046997
>>>res2[0,0,1]
3.035151481628418

可以看到從小數點後位7位開始兩個輸出值出現了差異!

結論

所以說在tensor的同樣操作下,出現不一致結果(精度上)的可能性很大,在做相等條件判斷時需要注意,即使同樣的輸入同樣的操作可能出現不一樣的結果。
之後又嘗試對於a,b的位置進行交換,竟然發現即使是同一個函式操作,如matmal(),matmul(a,b.transpose(1,2))和matmul(b,a.transpose(1,2)).transpose(1,2)結果也存在不一樣的元素。

相關推薦

筆記Pytorch關於torch.matmultorch.bmm輸出tensor數值一致問題

發現 對於torch.matmul和torch.bmm,都能實現對於batch的矩陣乘法: a = torch.rand((2,3,10)) b = torch.rand((2,2,10)) ### matmal() res1 = torch.matmu

小白學PyTorch1 搭建一個超簡單的網路

文章目錄: [TOC] ## 1 任務 首先說下我們要搭建的網路要完成的學習任務: 讓我們的神經網路學會邏輯異或運算,異或運算也就是俗稱的“相同取0,不同取1” 。再把我們的需求說的簡單一點,也就是我們需要搭建這樣一個神經網路,讓我們在輸入(1,1)時輸出0,輸入(1,0)時輸出1(相同取0,不同取1),

小白學PyTorch3 淺談DatasetDataloader

文章目錄: [TOC] ## 1 Dataset基類 PyTorch 讀取其他的資料,主要是通過 Dataset 類,所以先簡單瞭解一下 Dataset 類。在看很多PyTorch的程式碼的時候,也會經常看到dataset這個東西的存在。Dataset類作為所有的 datasets 的基類存在,所有的 da

小白學PyTorch4 構建模型三要素與權重初始化

文章目錄: [TOC] ## 1 模型三要素 三要素其實很簡單 1. 必須要繼承nn.Module這個類,要讓PyTorch知道這個類是一個Module 2. 在\_\_init\_\_(self)中設定好需要的元件,比如conv,pooling,Linear,BatchNorm等等 3. 最後在forwa

小白學PyTorch5 torchvision預訓練模型與資料集全覽

文章來自:微信公眾號【機器學習煉丹術】。一個ai專業研究生的個人學習分享公眾號 文章目錄: [TOC] # torchvision >官網上的介紹(FQ):The torchvision package consists of popular datasets, model architecture

小白學PyTorch6 模型的構建訪問遍歷儲存(附程式碼)

文章轉載自微信公眾號:機器學習煉丹術。歡迎大家關注,這是我的學習分享公眾號,100+原創乾貨。 文章目錄: [TOC] 本文是對一些函式的學習。函式主要包括下面四個方便: - 模型構建的函式:```add_module```,```add_module```,```add_module``` - 訪問子

小白學PyTorch8 實戰之MNIST小試牛刀

文章來自微信公眾號【機器學習煉丹術】。有什麼問題都可以諮詢作者WX:cyx645016617。想交個朋友佔一個好友位也是可以的~好友位快滿了不過。 參考目錄: [TOC] 在這個文章中,主要是來做一下MNIST手寫數字集的分類任務。這是一個基礎的、經典的分類任務。建議大家一定要跟著程式碼做一做,原始碼已經上

小白學PyTorch9 tensor資料結構與儲存結構

文章來自微信公眾號【機器學習煉丹術】。 上一節課,講解了MNIST影象分類的一個小實戰,現在我們繼續深入學習一下pytorch的一些有的沒的的小知識來作為只是儲備。 參考目錄: @[toc] ## 1 pytorch資料結構 ### 1.1 預設整數與浮點數 **【pytorch預設的整數是int64】*

小白學PyTorch11 MobileNet詳解及PyTorch實現

文章來自微信公眾號【機器學習煉丹術】。我是煉丹兄,歡迎加我微信好友交流學習:cyx645016617。 @[toc] 本來計劃是想在今天講EfficientNet PyTorch的,但是發現EfficientNet是依賴於SENet和MobileNet兩個網路結構,所以本著本系列是給“小白”初學者學習的,所

小白學PyTorch12 SENet詳解及PyTorch實現

文章來自微信公眾號【機器學習煉丹術】。我是煉丹兄,有什麼問題都可以來找我交流,近期建立了微信交流群,也在朋友圈抽獎贈書十多本了。我的微信是cyx645016617,歡迎各位朋友。 參考目錄: @[toc] 上一節課講解了MobileNet的一個DSC深度可分離卷積的概念,希望大家可以在實際的任務中使用這種方

小白學PyTorch13 EfficientNet詳解及PyTorch實現

參考目錄: [TOC] 文章來自微信公眾號【機器學習煉丹術】。我是煉丹兄,如果有疑問或者想要和煉丹兄交流的可以加微信:cyx645016617. efficientNet的論文原文連結: https://arxiv.org/pdf/1905.11946.pdf **模型擴充套件Model scaling

小白學PyTorch15 TF2實現一個簡單的服裝分類任務

【新聞】:機器學習煉丹術的粉絲的人工智慧交流群已經建立,目前有目標檢測、醫學影象、時間序列等多個目標為技術學習的分群和水群嘮嗑的總群,歡迎大家加煉丹兄為好友,加入煉丹協會。微信:cyx645016617. 參考目錄: [TOC] ## 0 為什麼學TF 之前的15節課的pytorch的學習,應該是讓不少朋

小白學PyTorch16 TF2讀取圖片的方法

【新聞】:機器學習煉丹術的粉絲的人工智慧交流群已經建立,目前有目標檢測、醫學影象、NLP等多個學術交流分群和水群嘮嗑的總群,歡迎大家加煉丹兄為好友,加入煉丹協會。微信:cyx645016617. 參考目錄: [TOC] 本文的程式碼已經上傳公眾號後臺,回覆【PyTorch】獲取。 ## 1 PIL讀取圖片

小白學PyTorch17 TFrec檔案的建立與讀取

【新聞】:機器學習煉丹術的粉絲的人工智慧交流群已經建立,目前有目標檢測、醫學影象、時間序列等多個目標為技術學習的分群和水群嘮嗑的總群,歡迎大家加煉丹兄為好友,加入煉丹協會。微信:cyx645016617. 參考目錄: [TOC] 本文的程式碼已經上傳公眾號後臺,回覆【PyTorch】獲取。 第一次接觸到T

小白學PyTorch18 TF2構建自定義模型

【機器學習煉丹術】的煉丹總群已經快滿了,要加入的快聯絡煉丹兄WX:cyx645016617 參考目錄: [TOC] 之前講過了如何用tensorflow構建資料集,然後這一節課講解如何用Tensorflow2.0來建立模型。 TF2.0中建立模型的API基本上都放到了它的Keras中了,Keras可以理

小白學PyTorch19 TF2模型的儲存與載入

【新聞】:機器學習煉丹術的粉絲的人工智慧交流群已經建立,目前有目標檢測、醫學影象、時間序列等多個目標為技術學習的分群和水群嘮嗑的總群,歡迎大家加煉丹兄為好友,加入煉丹協會。微信:cyx645016617. 參考目錄: [TOC] 本文主要講述TF2.0的模型檔案的儲存和載入的多種方法。主要分成兩型別:模型

小白學PyTorch20 TF2的eager模式與求導

【新聞】:機器學習煉丹術的粉絲的人工智慧交流群已經建立,目前有目標檢測、醫學影象、時間序列等多個目標為技術學習的分群和水群嘮嗑的總群,歡迎大家加煉丹兄為好友,加入煉丹協會。微信:cyx645016617. 參考目錄: [TOC] 之前講解了如何構建資料集,如何建立TFREC檔案,如何構建模型,如何儲存模型

小白學PyTorch21 Keras的API詳解(上)卷積、啟用、初始化、正則

【新聞】:機器學習煉丹術的粉絲的人工智慧交流群已經建立,目前有目標檢測、醫學影象、時間序列等多個目標為技術學習的分群和水群嘮嗑答疑解惑的總群,歡迎大家加煉丹兄為好友,加入煉丹協會。微信:cyx645016617. 參考目錄: [TOC] 我們對Keras應該已經有了一個直觀、巨集觀的認識了。現在,我們來系

小白學PyTorch21 Keras的API詳解(下)池化、Normalization層

文章來自微信公眾號:【機器學習煉丹術】。作者WX:cyx645016617. 參考目錄: [toc] 下篇的內容中,主要講解這些內容: - 四個的池化層; - 兩個Normalization層; ## 1 池化層 和卷積層相對應,每一種池化層都有```1D,2D,3D```三種類型,這裡主要介紹2D處理影象

MyBatis解決資料庫欄位名稱與Java實體類屬性名稱一致問題

問題描述:       有時候在專案中會遇到資料庫欄位名稱與實體類屬性名稱取得不一樣的情況,如下:      資料庫裡的資料為:       此時,如果我們查詢該表的某條資料,Proj