deep learning with pytorch(一)

1.create a basic nerual network model with pytorch

數據集 Iris?UCI Machine Learning Repository

fully connected ?

目標:創建從輸入層的代碼開始,向前移動到隱藏層,最后到輸出層

# %%
import torch
import torch.nn as nn
import torch.nn.functional as F# %%
# create a model class that inherits nn.Module 這里是Module 不是model
class Model(nn.Module):#input layer (4 features of the flower) -->#  Hidden layer1 (number of neurons) -->#  H2(n) --> output (3 classed of iris flowers)def __init__(self, in_features = 4, h1 = 8, h2 = 9, out_features = 3):super().__init__() # instantiate out nn.Module 實例化self.fc1 = nn.Linear(in_features= in_features, out_features= h1)self.fc2 = nn.Linear(in_features= h1, out_features= h2)self.out = nn.Linear(in_features= h2, out_features= out_features)# moves everything forward def forward(self, x):# rectified linear unit 修正線性單元 大于0則保留,小于0另其等于0x = F.relu(self.fc1(x))x = F.relu(self.fc2(x))x = self.out(x)return x# %%
# before we turn it on we need to create a manual seed, because networks involve randomization every time.
# say hey start here and then go randomization, then we'll get basically close to the same outputs# pick a manual seed for randomization
torch.manual_seed(seed= 41)
# create an instance of model
model = Model()

2.load data and train nerual network model?

torch.optim

torch.optim — PyTorch 2.2 documentation

1. optimizer.zero_grad()

  • 作用: 清零梯度。在訓練神經網絡時,每次參數更新前,需要將梯度清零。因為如果不清零,梯度會累加到已有的梯度上,這是PyTorch的設計決策,目的是為了處理像RNN這樣的網絡結構,它們在一個循環中多次計算梯度。

  • 原理: PyTorch在進行反向傳播(backward)時,會累計梯度,而不是替換掉當前的梯度值。因此,如果不手動清零,梯度值會不斷累積,導致訓練過程出錯。

2. loss.backward()

  • 作用: 計算梯度。這一步會根據損失函數對模型參數進行梯度的計算。在神經網絡中,損失函數衡量的是模型輸出與真實標簽之間的差異,通過反向傳播算法,可以計算出損失函數關于模型各個參數的梯度。

  • 原理: 反向傳播是一種有效計算梯度的算法,它首先計算輸出層的梯度,然后逆向逐層傳播至輸入層。這個過程依賴于鏈式法則,是深度學習訓練中的核心。

3. optimizer.step()

  • 作用: 更新參數。基于計算出的梯度,更新模型的參數。這一步實際上是在執行優化算法(如SGD、Adam等),根據梯度方向和設定的學習率調整參數值,以減小損失函數的值。

  • 原理: 優化器根據梯度下降(或其它優化算法)更新模型參數。梯度指示了損失函數增長最快的方向,因此通過向相反方向調整參數,模型的預測誤差會逐漸減小。

  • # %%
    import pandas as pd
    import matplotlib.pyplot as plt
    %matplotlib inline# %%
    # url = 'https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/0e7a9b0a5d22642a06d3d5b9bcbad9890c8ee534/iris.csv'
    my_df = pd.read_csv('dataset/iris.csv')# %%
    # change last column from strings to integers
    my_df['species'] = my_df['species'].replace('setosa', 0.0)
    my_df['species'] = my_df['species'].replace('versicolor', 1.0)
    my_df['species'] = my_df['species'].replace('virginica', 2.0)
    my_df# my_df.head()
    # my_df.tail()# %%
    # train test split ,set X,Y    
    X = my_df.drop('species', axis = 1) # 刪除指定列
    y = my_df['species']# %%
    #Convert these to numpy arrays
    X = X.values
    y = y.values
    # X# %%
    # train test split
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size= 0.2, random_state= 41)# %%
    # convert X features to float tensors
    X_train = torch.FloatTensor(X_train)
    X_test = torch.FloatTensor(X_test)
    #convert y labels to long tensors
    y_train = torch.LongTensor(y_train)
    y_test = torch.LongTensor(y_test)# %%
    # set the criterion of model to measure the error,how far off the predicitons are from the data
    criterion = nn.CrossEntropyLoss()
    # choose Adam optimizer, lr = learing rate (if error does not go down after a bunch of 
    # iterations(epochs), lower our learning rate),學習率越低,學習所需時間越長
    optimizer = torch.optim.Adam(model.parameters(), lr= 0.01)
    # 傳進去的參數包括fc1, fc2, out
    # model.parameters# %%
    # train our model
    # epochs? (one run through all the training data in out network )
    epochs = 100
    losses = []
    for i in range(epochs):# go forward and get a predictiony_pred = model.forward(X_train) # get a predicted results#measure the loss/error, gonna be high at firstloss = criterion(y_pred, y_train) # predicted values vs y_train# keep track of our losses#detach()不再跟蹤計算圖中的梯度信息,numpy(): 這個方法將PyTorch張量轉換成NumPy數組。因為NumPy數組在Python科學計算中非常普遍,很多庫和函數需要用到NumPy數組作為輸入。losses.append(loss.detach().numpy()) #print every 10 epochesif i % 10 == 0:print(f'Epoch: {i} and loss: {loss}')# do some back propagation: take the error rate of forward propagation and feed it back# thru the network to fine tune the weights# optimizer.zero_grad() 清零梯度,為新的梯度計算做準備。# loss.backward() 計算梯度,即對損失函數進行微分,獲取參數的梯度。# optimizer.step() 更新參數,根據梯度和學習率調整參數值以最小化損失函數。optimizer.zero_grad()loss.backward()optimizer.step()# %%
    # graph it out
    plt.plot(range(epochs), losses)
    plt.ylabel("loss/error")
    plt.xlabel("Epoch")
    

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

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

相關文章

【大數據】詳細講解

大數據 0. 前言1. 大數據的5V特征2. 大數據技術3. 大數據分析4. 大數據應用5. 失效風險與挑戰 0. 前言 大數據是一個涉及非常龐大和復雜數據集的領域,這些數據集因其規模和復雜性而難以使用傳統數據處理軟件進行有效處理。在講解大數據之前,我們首先需要…

LeetCode26 刪除有序數組中的重復項

題目 給你一個 非嚴格遞增排列 的數組 nums ,請你原地刪除重復出現的元素, 使每個元素 只出現一次 ,返回刪除后數組的新長度。 元素的 相對順序 應該保持 一致 然后返回 nums 中唯一元素的個數。 示例 示例 1:輸入:num…

30天JS挑戰(第十四天)------數據的復制

第十四天挑戰(數據的復制) 地址:https://javascript30.com/ 所有內容均上傳至gitee,答案不唯一,僅代表本人思路 中文詳解:https://github.com/soyaine/JavaScript30 該詳解是Soyaine及其團隊整理編撰的,是對源代碼…

后端開發技術面試指南

工作10多年,每年都會幫組里面試一些新同學校招社招的都有,下面我就從一個面試官的視角來給大家拆解一下如何淡然應對后端開發技術面試。 1.一面多為電話面試 (1)問七問八 ①簡歷要注重內容,形式上不丑沒有錯別字即可。之前收到過一個工作5…

經典語義分割(一)利用pytorch復現全卷積神經網絡FCN

經典語義分割(一)利用pytorch復現全卷積神經網絡FCN 這里選擇B站up主[霹靂吧啦Wz]根據pytorch官方torchvision模塊中實現的FCN源碼。 Github連接:FCN源碼 1 FCN模型搭建 1.1 FCN網絡圖 pytorch官方實現的FCN網絡圖,如下所示。 1.2 backbone FCN原…

為raspberrypi編譯bpftrace調試工具

基于eBPF的嵌入式應用調試 筆者之前寫過幾篇有關于使用eBPF調試Linux內核和應用的博客,其中提到,在嵌入式設備上使用BCC或bpftrace是不可行的;主要原因在于嵌入式設備的資源有限,而這兩個調試工具依賴python/clang/llvm等庫&…

Scratch 第十六課-彈珠臺游戲

第十六課-彈珠臺游戲 大家好,今天我們一起做一款彈珠臺scratch游戲,我們也可以叫它彈球游戲!這款游戲在剛出來的時候非常火爆。小朋友們要認真學習下! 這節課的學習目標 物體碰撞如何處理轉向問題。復習鍵盤對角色的控制方式。…

STL-內存的配置與釋放

STL-內存的配置與釋放 STL有兩級空間配置器,默認是使用第二級。第二級空間配置器會在某些情況下去調用第一級空間配置器。空間配置器都是在allocate函數內分配內存,在deallocate函數內釋放內存。 第一級空間配置器 第一級配置器只是對malloc函數和fre…

【自然語言處理】BitNet b1.58:1bit LLM時代

論文地址:https://arxiv.org/pdf/2402.17764.pdf 相關博客 【自然語言處理】BitNet b1.58:1bit LLM時代 【自然語言處理】【長文本處理】RMT:能處理長度超過一百萬token的Transformer 【自然語言處理】【大模型】MPT模型結構源碼解析(單機版)…

如何在 Mac 上成功輕松地恢復 Excel 文件

Microsoft Excel 的 Mac 版本始終略落后于 Windows 版本,這也許可以解釋為什么如此多的用戶渴望學習如何在 Mac 上恢復 Excel 文件。 但導致重要電子表格不可用的不僅僅是 Mac 版 Excel 的不完全穩定性。用戶有時會失去注意力并刪除錯誤的文件,存儲設備…

2024-03-03 c++

🌸 MFC進度條控件 | Progress Control 1。新建MFC項目(基于對話框、靜態庫) 2。添加控件,刪除初始的3個多余控件 加1個progress control,修改其marquee為true,添加變量:變量名為test_progress。…

Angular基礎---HelloWorld---Day1

文章目錄 1. 創建Angular 項目2.對Angular架構的最基本了解3.創建并引用新的組件(component)4.對Angular架構新的認識(多組件)5.組件中業務邏輯文件的編輯(ts文件)6.標簽中屬性的綁定(1) ID的綁定(2) class…

String和String Builder

String和StringBuilder的區別 String類 String類代表字符串。java程序中所有字符串文字(例如“abc”)都被實現為此類的實例。 String類源碼是用final修飾的,它們的值在創建后不能被更改。字符串緩沖區支持可變字符串。 String對象是不可變…

STM32 (2)

1.stm32編程模型 將C語言程序燒錄到芯片中會存儲在單片機的flsah存儲器中,給芯片上電后,Flash中的程序會逐條進入到CPU中去執行,進而CPU去控制各種模塊(即外設)去實現各種功能。 2.寄存器和寄存器編程 CPU通過控制其…

Apache POI的簡單介紹與應用

介紹 Apache POI 是一個處理Miscrosoft Office各種文件格式的開源項目。我們可以使用 POI 在 Java 程序中對Miscrosoft Office各種文件進行讀寫操作。PS: 一般情況下,POI 都是用于操作 Excel 文件,如圖: Apache POI 的應用場景&…

SQL無列名注入

SQL無列名注入 ? 前段時間,隊里某位大佬發了一個關于sql注入無列名的文章,感覺好像很有用,特地研究下。 關于 information_schema 數據庫: ? 對于這一個庫,我所知曉的內容并不多,并且之前總結SQL注入的…

設計模式-橋接模式實踐案例

橋接模式(Bridge Pattern)是一種結構型設計模式,用于將抽象與實現分離,使它們可以獨立地變化。這種模式通過提供一個橋接結構,可以將實現接口的實現部分和抽象層中可變化的部分分離開來。 以下是一個使用 Java 實現橋…

【數據結構】_包裝類與泛型

目錄 1. 包裝類 1.1 基本數據類型和對應的包裝類 1.2 (自動)裝箱和(自動)拆箱 1.2.1 裝箱與拆箱 1.2.2 自動(顯式)裝箱與自動(顯式)拆箱 1.3 valueOf()方法 2. 泛型類 2.1 泛…

【深度學習筆記】計算機視覺——目標檢測和邊界框

目標檢測和邊界框 前面的章節(例如 sec_alexnet— sec_googlenet)介紹了各種圖像分類模型。 在圖像分類任務中,我們假設圖像中只有一個主要物體對象,我們只關注如何識別其類別。 然而,很多時候圖像里有多個我們感興趣…

某大型制造企業數字化轉型規劃方案(附下載)

目錄 一、項目背景和目標 二、業務現狀 1. 總體應用現狀 2. 各模塊業務問題 2.1 設計 2.2 仿真 2.3 制造 2.4 服務 2.5 管理 三、業務需求及預期效果 1. 總體業務需求 2. 各模塊業務需求 2.1 設計 2.2 仿真 2.3 制造 2.4 服務 2.5 管理 四、…