logits是啥、傅里葉變換

什么是logtis??


在深度學習的上下文中,logits 就是一個向量,下一步通常被投給 softmax/sigmoid 的向量。。

softmax的輸出是分類任務的概率,其輸入是logits層。 logits層通常產生-infinity到+ infinity的值,而softmax層將其轉換為0到1的值。

舉個例子:

如果一個二分類模型的輸出層是一個單節點,沒有激活函數,輸出值是2.5。則2.5就是這個樣本被預測為正類的logits。
如果一個多分類模型的輸出層是5個節點,沒有激活函數,輸出值是[1.2, 3.1, -0.5, 4.8, 2.3]。則這個向量表示該樣本屬于5個類別的logits。
logits可以取任意實數值,正值表示趨向于分類到該類,負值表示趨向于不分類到該類。與之對應,probability經過softmax/sigmoid歸一化到0-1之間,表示屬于該類的概率。

logtis在交叉熵損失中的示例:
logtis可以看作神經網絡輸出的未經過歸一化(softmax/sigmoid)的概率,所以將其結果用于分類任務計算loss時,如求cross_entropy的loss函數會設置from_logits參數。

因此,當from_logtis=False(默認情況)時,可以理解為輸入的y_pre不是來自logtis,那么它就是已經經過softmax或者sigmoid歸一化后的結果了;當from_logtis=True時,則可以理解為輸入的y_pre是logits,那么需要對它進行softmax或者sigmoid處理再計算cross entropy。

如下面的兩種方式計算得到的loss都是一樣的:

import torch
import torch.nn as nn
import torch.nn.functional as Ffrom_logits = True ?# 標記logtis or sigmoid
y_pre = torch.FloatTensor([[5, 5], [2, 8]]) ?# logtis值:神經網絡的輸出,未概率歸一化
y_true = torch.FloatTensor([[1, 0], [0, 1]]) ?# 真實的二分類標簽if from_logits == True:# BCEWithLogitsLoss可以直接對logtis值進行二分類的損失計算criterion = nn.BCEWithLogitsLoss()loss = criterion(y_pre, y_true)
else:# BCELoss需要對logtis值進行概率歸一化,然后再進行二分類的損失計算criterion = nn.BCELoss()y_pre = F.sigmoid(y_pre)loss = criterion(y_pre, y_true)
print(loss)

傅里葉變換
連續與離散
一般人們口中所說的傅里葉變換都是指連續傅里葉變換,針對的是連續時域信號。維基百科上是這么描述連續信號的:

連續信號或稱連續時間信號是指定義在實數域的信號,自變量(一般是時間)的取值連續。若信號的幅值和自變量均連續,則稱為模擬信號。根據實數的性質,時間參數的連續性意味著信號的值在時間的任意點均有定義。

簡單來說,對于一個sin函數的連續信號,其波形長這樣:

對于計算設備的信號處理,因為采樣設備的采樣率是有限的。因此得到的采樣信號都是離散的,所以就有了針對離散信號的離散傅里葉變換。維基百科是這么描述離散信號:

離散信號是在連續信號上采樣得到的信號。與連續信號的自變量是連續的不同,離散信號是一個串行,即其自變量是“離散”的。這個串行的每一個值都可以被看作是連續信號的一個采樣。由于離散信號只是采樣的串行,并不能從中獲得采樣率,因此采樣率必須另外存儲。以時間為自變量的離散信號為離散時間信號。
離散信號并不等同于數字信號。數字信號不僅是離散的,而且是經過量化的。即,不僅其自變量是離散的,其值也是離散的。因此離散信號的精度可以是無限的,而數字信號的精度是有限的。而有著無限精度,亦即在值上連續的離散信號又叫抽樣信號。所以離散信號包括了數字信號和抽樣信號。

信號的篩選

簡單概括公式所表達的實際意義后,我們再來看為什么要這么做。廢話少說直接按照傅里葉變換公式所描述的做法,將信號與各已頻率信號乘法后積分,寫一段簡單的matlab程序。最終結果如下圖:

從圖上可以很清楚直觀的看出,當未知信號與基信號頻率相同時,他們乘積的積分達到了最大。而這個積分最終的圖像是不是就很像信號經過傅里葉變換后的頻域圖像呢!利用了乘法負負得正的特性,當基信號與未知信號頻率完全相同的時候,其時域上乘積全為正數。因此,此時的積分達到最大值。通過此類操作即可得到未知信號的頻率。

說人話,就是用各種頻率的基信號與未知信號做對比,看看哪個頻率的基信號與未知信號最像!!!,而這個對比的方法,用數學來描述就是先相乘后積分,這樣描述的話,是不是聽起來就沒那么復雜了。

初始相位的問題

上文所討論的對未知信號頻率的篩選,全部都是建立在未知信號相位為0的情況下。但是實際使用過程中,信號的相位與頻率都是未知的,若只使用上文(4)所描述的方式肯定是不行的,如下圖:

可以看到若未知信號的初始相位為90°,若還使用公式4,得出的結果與實際就有誤了。

此時再回頭看看傅里葉變換的公式,不難發現,傅里葉變換使用的是復數信號。e ? j ω t = c o s ( ω t ) ? j s i n ( ω t ) e^{-j\omega t} = cos(\omega t)-jsin(\omega t)e?
?jωt
?=cos(ωt)?jsin(ωt)。也就是說傅里葉變換對未知信號使用復數信號相乘后求積分。而不是只對單個正弦信號做比較。

不難看出,傅里葉變換的結果是復數信號,其結果實部的值就是表示未知信號與cos信號的相關度,虛部值表示未知信號與sin信號的相關度。由此可以看出,傅里葉變換的結果還包含了未知信號的相位信息。

為了分析其頻率信息,我們可以對結果做取模開方處理

快速傅里葉變換(FFT)

快速傅里葉算法本質上是對離散傅里葉變化的改進,本質上是利用矩陣乘法時不同基信號在奇數或偶數點的與被采樣信號的乘積相同來減少計算,嚴格的數學推斷可以參考這篇快速理解FFT算法(完整無廢話)

MATLAB 仿真代碼

% 設置時間范圍
t = 0:0.01:2*pi;
freq1 = 5;
freq2 = 0;% 創建GIF文件
filename = 'sin_wave_animation.gif';
fps = 120;% 初始化乘積結果的和
sum_of_product = zeros(1, length(t));
sum_of_product_sin = zeros(1, length(t));
sum_of_product_cos = zeros(1, length(t));for i = 1:length(t)% 生成兩個不同頻率的正弦波y1 = cos(freq1 * t);y2 = sin((freq2+i/10) * t);y3 = cos((freq2+i/10) * t);% 計算兩個正弦波的乘積y_product_sin = y1 .* y2;y_product_cos = y1 .* y3;% 計算乘積結果的和sum_of_product_sin(i+1) = sum(y_product_sin);sum_of_product_cos(i+1) = sum(y_product_cos);sum_of_product = sqrt(power(sum_of_product_sin, 2) + power(sum_of_product_cos, 2));arr = 0:0.1:10;subplot(3, 1, 1);plot(arr(1:i), sum_of_product_sin(1:i), 'g'); % 只繪制當前時間點之前的數據xlabel('x');ylabel('y');xlim([0, 10]);ylim([-500, 500]);title('Re');arr = 0:0.1:10;subplot(3, 1, 2);plot(arr(1:i), sum_of_product_cos(1:i), 'g'); % 只繪制當前時間點之前的數據xlabel('x');ylabel('y');xlim([0, 10]);ylim([-500, 500]);title('Im');arr = 0:0.1:10;subplot(3, 1, 3);plot(arr(1:i), sum_of_product(1:i), 'g'); % 只繪制當前時間點之前的數據xlabel('x');ylabel('y');xlim([0, 10]);ylim([-500, 500]);title('sqrt(power(Re, 2) + power(Im, 2));');% 保存當前圖像為GIFframe = getframe(gcf);im = frame2im(frame);[imind, cm] = rgb2ind(im, 256);if i == 1imwrite(imind, cm, filename, 'gif', 'Loopcount', inf, 'DelayTime', 1/fps);elseimwrite(imind, cm, filename, 'gif', 'WriteMode', 'append', 'DelayTime', 1/fps);endif i == 100break;endend

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

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

相關文章

Adobe Illustrator學習備忘

1.移動畫板:需按住空格鍵加鼠標一塊才能拖動 2.放大縮小畫板:按住Alt鍵加鼠標滾輪 3.撤回:CtrlZ 4.鋼筆練習網站:The Bzier Game

【初識】內網滲透——基礎概念,基本工具使用

目錄 一、域,工作組,域控制器,活動目錄相關概念: 域環境: 工作組: 域控制器DC: 活動目錄AD: 二、內網的基本場景: 三、內網滲透基本測試方案: #案例1一基本信…

remove_const的工作原理及c++的類型推導

author: hjjdebug date: 2025年 05月 21日 星期三 12:51:57 CST descrip: remove_const的工作原理及c的類型推導 文章目錄 1. 簡單的程序代碼.2.std::remove_const_t 到底是怎樣工作的?2.1 測試代碼2.2 類型推導的調試手段.2.2.1 給類模板添加成員函數,讓它打印信息…

人臉識別,使用 deepface + api + flask, 改寫 + 調試

1. 起因, 目的, 感受: github deepface 這個項目寫的很好, 繼續研究使用這個項目,改寫 api。增加一個前端 flask app 2. 先看效果 3. 過程: 大力改寫原始項目中 api 這部分的代碼, 原始項目的文件結構太繁雜了: 我把…

三維表面輪廓儀的維護保養是確保其長期穩定運行的關鍵

三維表面輪廓儀是一種高精度測量設備,用于非接觸式或接觸式測量物體表面的三維形貌、粗糙度、臺階高度、紋理特征等參數。其主要基于光學原理進行測量。它利用激光或其他光源投射到被測物體表面,通過接收反射光或散射光,結合計算機圖像處理技…

Lambda表達式的高級用法

今天來分享下Java的Lambda表達式,以及它的高級用法。 使用它可以提高代碼的簡潔度,使代碼更優雅。 一、什么是lambda表達式 Lambda 表達式是 Java 8 引入的特性,用于簡化匿名內部類的語法,使代碼更簡潔,尤其在處理函…

31-35【動手學深度學習】深度學習硬件

1. CPU和GPU 1.1 CPU CPU每秒鐘計算的浮點運算數為0.15,GPU為12。GPU的顯存很低,16GB(可能32G封頂),CPU可以一直插內存。 左邊是GPU(只能做些很簡單的游戲,視頻處理),中…

【MySQL成神之路】MySQL常見命令匯總

目錄 MySQL常用命令總結 1. 數據庫操作 2. 表操作 3. 數據操作(DML) 4. 索引與優化 5. 用戶與權限管理 6. 備份與恢復 7. 事務控制 8. 常用函數 9. 系統狀態與日志 總結 MySQL常用命令總結 MySQL作為最流行的關系型數據庫之一,提供…

Dify的大語言模型(LLM) AI 應用開發平臺-本地部署

前言 今天閑著,搗鼓一下 Dify 這個開源平臺,在 mac 系統上,本地部署并運行 Dify 平臺,下面記錄個人在本地部署Dify 的過程。 Dify是什么? Dify是一個開源的大語言模型(LLM)應用開發平臺&#…

【論文閱讀】針對BEV感知的攻擊

Understanding the Robustness of 3D Object Detection with Bird’s-Eye-View Representations in Autonomous Driving 這篇文章是發表在CVPR上的一篇文章,針對基于BEV的目標檢測算法進行了兩類可靠性分析,即惡劣自然條件以及敵對攻擊。同時也提出了一…

SonarQube的核心作用與用途

SonarQube作為一個開源的代碼質量管理平臺,致力于持續分析代碼的健康狀態,幫助開發團隊提升代碼質量。以下是其核心作用與用途的詳細說明: 1、靜態代碼分析 SonarQube通過靜態代碼分析技術,自動識別代碼中的潛在問題。它能夠檢測…

AI工程師系列——面向copilot編程

前言 ? 筆者已經使用copilot協助開發有一段時間了,但一直沒有總結一個協助代碼開發的案例,特別是怎么問copilot,按照什么順序問,哪些方面可以高效的生成需要的代碼,這一次,筆者以IP解析需求為例,沉淀一個實踐案例,供大家參考 當然,其實也不局限于copilot本身,類似…

【軟件設計師】知識點簡單整理

文章目錄 數據結構與算法排序算法圖關鍵路徑 軟件工程決策表耦合類型 編程思想設計模式 計算機網絡域名請求過程 數據結構與算法 排序算法 哪些排序算法是穩定的算法?哪些不是穩定的算法,請舉出例子。 穩定排序算法:冒泡排序、插入排序、歸并排序、基數排序、計數…

FastAPI 支持文件下載和上傳

文章目錄 1. 文件下載處理1.1. 服務端處理1.1.1. 下載小文件1.1.2. 下載大文件(yield 支持預覽的)1.1.3. 下載大文件(bytes)1.1.4. 提供靜態文件服務1.1.5. 中文文件名錯誤 1.2. 客戶端處理1.2.1. 普通下載1.2.2. 分塊下載1.2.3. …

naive-ui切換主題

1、在App.vue文件中使用 <script setup lang"ts"> import Dashboard from ./views/dashboard/index.vue import { NConfigProvider, NGlobalStyle, darkTheme } from naive-ui import { useThemeStore } from "./store/theme"; // 獲取存儲的主題類…

Kotlin 協程 (三)

協程通信是協程之間進行數據交換和同步的關鍵機制。Kotlin 協程提供了多種通信方式&#xff0c;使得協程能夠高效、安全地進行交互。以下是對協程通信的詳細講解&#xff0c;包括常見的通信原語、使用場景和示例代碼。 1.1 Channel 定義&#xff1a;Channel 是一個消息隊列&a…

使用SQLite Studio導出/導入SQL修復損壞的數據庫

使用SQLite Studio導出/導入SQL修復損壞的數據庫 使用Zotero時遇到了數據庫損壞&#xff0c;在軟件中寸步難行&#xff0c;遂嘗試修復數據庫。 一、SQLite Studio簡介 SQLite Studio是一款專為SQLite數據庫設計的免費開源工具&#xff0c;支持Windows/macOS/Linux。相較于其…

【git config --global alias | Git分支操作效率提升實踐指南】

git config --global alias | Git分支操作效率提升實踐指南 背景與痛點分析 在現代軟件開發團隊中&#xff0c;Git分支管理是日常工作的重要組成部分。特別是在規范的開發流程中&#xff0c;我們經常會遇到類似 feature/user-management、bugfix/login-issue 或 per/cny/dev …

(八)深度學習---計算機視覺基礎

分類問題回歸問題聚類問題各種復雜問題決策樹√線性回歸√K-means√神經網絡√邏輯回歸√嶺回歸密度聚類深度學習√集成學習√Lasso回歸譜聚類條件隨機場貝葉斯層次聚類隱馬爾可夫模型支持向量機高斯混合聚類LDA主題模型 一.圖像數字化表示及建模基礎 二.卷積神經網絡CNN基本原…

在tensorflow源碼環境里,編譯出獨立的jni.so,避免依賴libtensorflowlite.so,從而實現apk體積最小化

需要在APP里使用tensorflow lite來運行PC端訓練的model.tlite&#xff0c;又想apk的體積最小&#xff0c;嘗試了如下方法&#xff1a; 1. 在gradle里配置 implementation("org.tensorflow:tensorflow-lite:2.16.1") 這樣會引入tensorflow.jar&#xff0c;最終apk的…