Pytorch深度學習實踐筆記6(b站劉二大人)

🎬個人簡介:一個全棧工程師的升級之路!
📋個人專欄:pytorch深度學習
🎀CSDN主頁?發狂的小花
🌄人生秘訣:學習的本質就是極致重復!

《PyTorch深度學習實踐》完結合集_嗶哩嗶哩_bilibili?

目錄

1 Logistic Regression

2 整體流程

3 Softmax 多分類

4 交叉熵crossEntropy

5 Logistic Regression 代碼


1 Logistic Regression


區別于Linear Regression,加入了激活函數,引入非線性。


一個二分類問題:
給定學習時長x,y為考試是否可以通過,通過為1,不通過為0


使用二分類激活函數sigmod,softmax多分類在只有兩個分類時,也可以變成sigmoid


2 整體流程

  1. 數據準備:

  • 模型建立:

  • Loss建立



?

  • mini-Batch Loss for Binary Classification


3 Softmax 多分類

一文徹底搞懂 Softmax 函數,數學原理分析和 PyTorch 驗證?



softmax就是將一些大的數字拉伸到0~1之間,而且使得大的數所占的比例更大,小的數所占的比例更小,這樣如果每一個原始的數據代表score的話,將其總分控制在0~1之間,可以進一步使用交叉熵函數來計算loss。
這里Softmax會帶來一些數據上溢和下溢問題,上溢問題可以減去max(y),下溢問題可以使用log(y)等手段來解決。


一個簡單的softmax的例子:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <math.h>#define SIZE (4)void softMax(double *src,double *dst,const int N)
{double exp_score[N];double sum = 0.f;for (int i = 0;i < N;i++){exp_score[i] = exp(src[i]);sum += exp_score[i];}for (int i = 0;i < N;i++){dst[i] = exp_score[i] / sum; }}int main(int argc, char *argv[])
{double score[SIZE] = {2.1,2.0,0.1,3.7};double probability[SIZE] = {0.f};softMax(score,probability,SIZE);printf("Probability:[");for (int i = 0;i < SIZE;i++){printf(" %f ",probability[i]);}printf(" ]\n");return 0;
}


4 交叉熵crossEntropy


計算兩個概率分布之間的差異的,由于Softmax和Sigmod都將score轉化為了概率分布,因此可以將交叉熵作為損失函數來計算y_true和y_pred之間的差異。
?

softmax分類器和交叉熵損失函數




一個多分類的交叉熵例子:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <math.h>#define M (3)
#define N (4)double crossEntropy(double *y_true,double *y_pred,int m,int n)
{// 防止log(0)的情況,對預測概率分布進行微小的修正for (int i = 0;i < m;i++){for (int j = 0;j < n;j++){y_pred[i*n+j] = y_pred[i*n+j] <= 0 ? (1e-7) : (y_pred[i*n+j] > 1 ? (1) : y_pred[i*n+j]);}}double sum = 0.f;for (int i = 0;i < m;i++){for (int j = 0;j < n;j++){sum += -y_true[i*n+j] * log2(y_pred[i*n+j]);}}return (sum / (double)m);
}int main(int argc, char *argv[])
{// one-hot 編碼 代表標簽分類 例如: 貓 狗 鳥 豬// 真實概率分布double probability[M][N] = {{1,0,0,0},{0,1,0,0},{0,0,1,0}};// double y_pred[M][N] = {{0.7,0.2,0.05,0.05},{0,1,0,0},{0.1,0.1,0.8,0}};double y_pred[M][N] = {{0.98,0.02,0,0},{0,1,0,0},{0,0,1,0}};double loss = crossEntropy(&probability[0][0],&y_pred[0][0],M,N);printf("loss: % .6lf \n",loss);return 0;
}



5 Logistic Regression 代碼

pytorch nn.BCELoss()詳解?

torch.empty()和torch.Tensor.random_()的使用舉例-CSDN博客?

import torch# prepare dataset
# 0 1 為分類標簽
# x_data 輸入 學習的時間
# y_data 輸出 考試通過與否(0 or 1)
x_data = torch.Tensor([[1.0], [2.0], [3.0],[1.1],[2.1],[1.5],[2.3],[4.1]])
y_data = torch.Tensor([[0], [0], [1],[0],[0],[0],[0],[1]])class LogisticRegressionModel(torch.nn.Module):def __init__(self):super(LogisticRegressionModel, self).__init__()self.linear = torch.nn.Linear(1,1)def forward(self, x):y_pred = torch.sigmoid(self.linear(x))return y_pred
model = LogisticRegressionModel()# construct loss and optimizer
criterion = torch.nn.BCELoss(size_average = True) 
optimizer = torch.optim.Adam(model.parameters(), lr = 0.05)# training cycle forward, backward, update
for epoch in range(10000):y_pred = model(x_data)loss = criterion(y_pred, y_data)print(epoch, loss.item())optimizer.zero_grad()loss.backward()optimizer.step()if (loss < 1e-7):breakprint('w = ', model.linear.weight.item())
print('b = ', model.linear.bias.item())# test dataset
x_test = torch.Tensor([[4.0],[5.0],[1.5],[2.5],[2.9],[3.0]])
y_test = model(x_test)
print('y_pred = ', y_test.data)

🌈我的分享也就到此結束啦🌈
如果我的分享也能對你有幫助,那就太好了!
若有不足,還請大家多多指正,我們一起學習交流!
📢未來的富豪們:點贊👍→收藏?→關注🔍,如果能評論下就太驚喜了!
感謝大家的觀看和支持!最后,?祝愿大家每天有錢賺!!!歡迎關注、關注!

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

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

相關文章

C#記錄日志

1、方法 private void Log(string LogStr) { //Trace.WriteLine(LogStr); StreamWriter sw null; try { LogStr DateTime.Now.ToLocalTime().ToString() "\n" LogStr; sw new StreamWriter("C:\\Text" DateTime.No…

山東大學軟件學院項目實訓-創新實訓-基于大模型的旅游平臺(二十)- JUC(6)

目錄 wait , notify wait vs sleep 正確使用方法 同步保護性暫停 join的源碼 Future 異步生產者/消費者模型 定義 Park & Unpark 原理 wait , notify 小故事小南需要煙才能工作&#xff0c;但它又要占這鎖讓別人無法進來。那么這個時候開一個waitSet相當于就是休…

一文講解——Java多態

目錄 一、什么是多態&#xff1f;二、轉型向上轉型向下轉型 三、方法覆蓋與方法重載四、綁定動態綁定靜態綁定 五、理解多態 一、什么是多態&#xff1f; 多態的詞組字面意思是&#xff1a; 某種事物多種形態。 但是對于我們學習Java 的程序原來說&#xff0c;就不不能簡單這樣…

springboot中線程池的使用

一、概念 線程池就是將多個線程對象放入一個池子里面&#xff0c;例如一個池塘&#xff0c;線程池就是這個池塘&#xff0c;池塘里面的魚就是線程池中的多個線程對象。1. 每一個線程&#xff0c;在一段時間內只能執行一個任務。2. 線程池中的各個線程是可以重復使用的。 二、創…

2024年內外貿一體化融合發展(長沙)交易會 ?辦公文具、禮品工藝品展

2024年內外貿一體化融合發展&#xff08;長沙&#xff09;交易會 辦公文具、禮品工藝品展 時間&#xff1a;2024年7月12-14日 地點&#xff1a;湖南國際會展中心&#xff08;芒果館&#xff09; 湖南省商廳 關于邀請參加2024內外貿一體化融合發展&#xff08;長沙&#xf…

Weblogic XML反序列化漏洞 [CVE-2017-10271]

漏洞環境搭建請參考 http://t.csdnimg.cn/i11e2 漏洞原理 Weblogic的wls security組件對外提供webservice服務&#xff0c;wls security組件使用了xmldecoder來解析用戶傳入的xml數據&#xff0c;如果用戶進行xml惡意數據的構造&#xff0c;即可觸發反序列化漏洞 漏洞版本 O…

簡述vue的實現原理

Vue.js 的實現原理可以概括為以下幾個方面&#xff1a; 響應式系統&#xff1a; Vue 的核心是其響應式系統。當 Vue 實例被創建時&#xff0c;它會遍歷 data 對象中的所有屬性&#xff0c;并使用 Object.defineProperty 方法將其轉換為 getter 和 setter。當 data 中的屬性發生…

python:如何創建簡單的流媒體服務器來播放.flv文件

要在Python中創建一個簡單的流媒體服務器來播放FLV&#xff08;Flash Video&#xff09;文件&#xff0c;你通常需要一個HTTP服務器&#xff0c;該服務器能夠處理對FLV文件的范圍請求&#xff08;Range Requests&#xff09;&#xff0c;因為流媒體通常不是一次性下載整個文件&…

CentOS 7.9 郵箱部署——Postfix+Dovecot詳細

PostfixDovecot 文章目錄 PostfixDovecot資源列表基礎環境一、部署DNS二、部署postfix和dovecot2.1、配置postfix2.2、配置dovecot2.3、創建郵件用戶 三、發送郵件測試3.1、windows安裝poxmail3.2、登錄郵箱3.3、發送接收郵件 四、搭建SSL認證加密4.1、生成私鑰4.2、生成公鑰4.…

正則工具類

目錄 1、 * 正則工具類 1.1、 * 提供驗證郵箱、手機號、電話號碼、身份證號碼、數字等方法 1.1.1、 * 驗證固定電話號碼 1.1.2、 * 驗證整數(正整數和負整數) 1.1.3、 * 驗證整數和浮點數(正負整數和正負浮點數)

貪心算法4(c++)

過河的最短時間 題目描述 輸入 在漆黑的夜里&#xff0c;N位旅行者來到了一座狹窄而且沒有護欄的橋邊。如果不借助手電筒的話&#xff0c;大家是無論如何也不敢過橋去的。不幸的是&#xff0c;N個人一共只帶了一只手電筒&#xff0c;而橋窄得只夠讓兩個人同時過&#xff0c;如果…

YOLOv8_pose預測流程-原理解析[關鍵點檢測理論篇]

YOLOv8_seg的網絡結構圖在博客YOLOv8網絡結構介紹_CSDN博客已經更新了,由網絡結構圖可以看到相對于目標檢測網絡,實例分割網絡只是在Head層不相同,如下圖所示,在每個特征層中增加了KeyPoint分支(淺綠色),通過兩個卷積組和一個Conv卷積得到得到通道數為51的特征圖,51表示…

window環境下QT5開發環境的搭建

1、安裝visual Stusio 15 生成工具2012 2、安裝Visual studio Enterprise 2017 3、Visual studio Enterprise 2017安裝完成之后&#xff0c; 修改&#xff1a;選擇桌面調試&#xff0c;如下&#xff1a; 4、打開QTcreator&#xff0c;選項中&#xff0c;配置編譯器&#xff…

摸魚大數據——Hive基礎理論知識——Hive環境準備

Hive環境準備 1、shell腳本執行方式 方式1: sh 腳本 注意: 需要進入腳本所在目錄,但腳本有沒有執行權限不影響執行 方式2: ./腳本 注意: 需要進入腳本所在目錄,且腳本必須有執行權限 方式3: /絕對路徑/腳本 注意: 不需要進入腳本所在目錄,但必須有執行…

線程池,日志

所要用到的知識點&#xff1a; 多線程的創建 生產消費模型&#xff0c; 線程鎖 條件變量 代碼&#xff1a; 線程池日志

基于STC12C5A60S2系列1T 8051單片機的TM1638鍵盤數碼管模塊的數碼管顯示與單片機連接的按鍵的按鍵值的功能

基于STC12C5A60S2系列1T 8051單片機的TM1638鍵盤數碼管模塊的數碼管顯示與單片機連接的按鍵的按鍵值應用 STC12C5A60S2系列1T 8051單片機管腳圖STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式及配置STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式介紹TM1638鍵盤數碼…

C++面向對象程序設計 - 輸入和輸出

程序的輸入指的是文件將數據傳送給程序&#xff0c;程序的輸出指的是從程序將數據傳送輸出文件。 C的輸入和和輸出包括以下三個方面&#xff1a; 對系統指定的標準設備的輸入和輸出&#xff0c;即從鍵盤輸入數據&#xff0c;輸出到顯示器屏幕。以外存磁盤&#xff08;或光盤、…

初探 Spring Boot Starter Security:構建更安全的Spring Boot應用

引言 Spring Boot 作為 Java 生態系統下的熱門框架&#xff0c;以其簡潔和易上手著稱。而在構建 Web 應用程序時&#xff0c;安全性始終是開發者必須重視的一個方面。Spring Boot Starter Security 為開發者提供了一個簡單但功能強大的安全框架&#xff0c;使得實現身份驗證和…

從動態代理角度簡單理解Spring AOP

1. 概述 動態代理 是指在運行時&#xff0c;動態地創建目標類的代理對象&#xff0c;并對其中特定的方法進行攔截或增強的技術。這種技術主要用于在不修改目標類代碼的情況下&#xff0c;增強目標類的功能。 在Java中&#xff0c;動態代理主要基于Java的反射機制和接口來實現…

gdc2024:Raytracing in Snowdrop技術實現與性能優化策略

在今年的GDC&#xff08;游戲開發者大會&#xff09;的Advanced Graphics Summit上&#xff0c;關于Snowdrop引擎中光線追蹤技術的討論引起了廣泛關注。 一、光線追蹤全局照明的實現細節 屏幕空間追蹤&#xff1a; 屏幕空間追蹤從相機出發&#xff0c;對屏幕上的每個像素點生成…