深度學習Note.4(機器學習實踐)

線性回歸

零.

1.paddle庫的一些API

paddle.rand(shape,dtype = None, name = None)

*隨機生成符合均勻分布的Tensor

paddle.nromal(mean = 0.0, std = 1.0, shape = None, name = None)

*隨機生成符合正態分布的Tensor

*輸入正態分布均值,標準差, 生成結果的形狀

*輸出形狀為shape的Tensor

paddle.randint(low = 0, high = None, shape = [1],dtype = 0, name = none)

*在指定范圍內生成符合均勻分布的Tensor

*輸入范圍的上下限。。。

paddle.linspace(start, stop, num, dtype = None, name = None)

*在指定區間生成均勻間隔的是定個值

*輸入區間,區間數,輸出1-DTensor?

paddle.rann(shape, dtype = None, name = None)

隨機生成符合標準正態分布的Tensor?

paddle.zeros(shape, dtype = None, name = None)

生成指定形狀的全0 Tensor?

?paddle.full(shape, fill_value, dtype=None,name=None)

創建指定形狀元素值均為指定值的Tensor

輸入:生成結果的形狀,元素值? ? 輸出:形狀為shape值全為fill_value的Tensor

?paddle.matmul(x, y, transpose_x=False,transpose_y=False, name=None)

功能:計算兩個Tensor乘積,遵循廣播規則
輸入:兩個Tensor以及相乘前是否轉置
輸出:Tensor,矩陣相乘后的結果

?paddle.mean(x, axis=None, keepdim=False,name=None)
功能:沿axis計算輸入的平均值
輸入:Tensor,計算軸,是否在輸出種保留減少的維度
輸出:Tensor,沿著axis進行平均值計算的結果

paddle.square(x, name=None)
功能:逐元素取平方
輸入:Tensor
輸出:返回取平方后的Tensor?

paddle.subtract(x, y, name=None)
功能:逐元素相減
輸入:輸入2個Tensor
輸出:Tensor,運算后的結果

paddle.eye(num_rows, num_columns=None, dtype=None, name=None)
功能:構建二維Tensor(主對角線元素為1,其他元素為0)
輸入:行數和列數
輸出:Tensor, shape為[num_rows, num_columns]

paddle.inverse(x,name=None)
功能:計算方陣的逆
輸入:輸入Tensor
輸出:輸入方陣的逆???

?2.matplotlib庫學習

一.數據集構建

import paddle
from matplotlib import pyplot as pltdef linear_func(x, w=1.2, b=0.5):return w * x + bdef create_toy_data(func, interval, sample_num, noise=0.0, add_outlier=False, outlier_ratio=0.01):X = paddle.rand(shape=[sample_num]) * (interval[1] - interval[0]) + interval[0]y = func(X)epsilon = paddle.normal(0, noise, shape=[y.shape[0]])y += epsilonif add_outlier:outlier_num = max(1, int(len(y) * outlier_ratio))outlier_idx = paddle.randint(len(y), shape=[outlier_num])y[outlier_idx] = y[outlier_idx] * 5return X.numpy(), y.numpy()  # 返回 NumPy 數組# 生成數據
func = linear_func
interval = (-10, 10)
train_num = 100
test_num = 50
noise = 2X_train, y_train = create_toy_data(func, interval, train_num, noise, add_outlier=False)
X_test, y_test = create_toy_data(func, interval, test_num, noise, add_outlier=False)# 生成理論分布數據(轉換為 NumPy)
X_underlying = paddle.linspace(interval[0], interval[1], train_num).numpy()
y_underlying = linear_func(paddle.to_tensor(X_underlying)).numpy()  # 確保輸出為 NumPy# 繪圖
plt.figure(figsize=(8, 6))
plt.scatter(X_train, y_train, marker='*', facecolor="none", edgecolor='green', s=50, label="Train Data")
plt.scatter(X_test, y_test, facecolor="none", edgecolor='red', s=50, label="Test Data")
plt.plot(X_underlying, y_underlying, c='#000000', linestyle='--', label="Underlying Distribution")
plt.xlabel("X", fontsize=12)
plt.ylabel("y", fontsize=12)
plt.title("Linear Regression Dataset", fontsize=14)
plt.legend()
plt.grid(True, linestyle=':', alpha=0.5)
plt.savefig('ml-vis.pdf', bbox_inches='tight', dpi=300)
plt.show()

結果;

二.模型構建

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? f(x;w,b)=wTx+b

y=Xw+b

import paddle
from nndl.op import Oppaddle.seed(10) #設置隨機種子# 線性算子
class Linear(Op):def __init__(self, input_size):"""輸入:- input_size:模型要處理的數據特征向量長度"""self.input_size = input_size# 模型參數self.params = {}self.params['w'] = paddle.randn(shape=[self.input_size,1],dtype='float32') self.params['b'] = paddle.zeros(shape=[1],dtype='float32')def __call__(self, X):return self.forward(X)# 前向函數def forward(self, X):"""輸入:- X: tensor, shape=[N,D]注意這里的X矩陣是由N個x向量的轉置拼接成的,與原教材行向量表示方式不一致輸出:- y_pred: tensor, shape=[N]"""N,D = X.shapeif self.input_size==0:return paddle.full(shape=[N,1], fill_value=self.params['b'])assert D==self.input_size # 輸入數據維度合法性驗證# 使用paddle.matmul計算兩個tensor的乘積y_pred = paddle.matmul(X,self.params['w'])+self.params['b']return y_pred# 注意這里我們為了和后面章節統一,這里的X矩陣是由N個x向量的轉置拼接成的,與原教材行向量表示方式不一致
input_size = 3
N = 2
X = paddle.randn(shape=[N, input_size],dtype='float32') # 生成2個維度為3的數據
model = Linear(input_size)
y_pred = model(X)
print("y_pred:",y_pred) #輸出結果的個數也是2個

三.損失函數

回歸任務是對連續值的預測,希望模型能根據數據的特征輸出一個連續值作為預測值。因此回歸任務中常用的評估指標是均方誤差

import paddledef mean_squared_error(y_true, y_pred):"""輸入:- y_true: tensor,樣本真實標簽- y_pred: tensor, 樣本預測標簽輸出:- error: float,誤差值"""assert y_true.shape[0] == y_pred.shape[0]# paddle.square計算輸入的平方值# paddle.mean沿 axis 計算 x 的平均值,默認axis是None,則對輸入的全部元素計算平均值。error = paddle.mean(paddle.square(y_true - y_pred))return error# 構造一個簡單的樣例進行測試:[N,1], N=2
y_true= paddle.to_tensor([[-0.2],[4.9]],dtype='float32')
y_pred = paddle.to_tensor([[1.3],[2.5]],dtype='float32')error = mean_squared_error(y_true=y_true, y_pred=y_pred).item()
print("error:",error)

四.模型優化

經驗風險最小化,利用偏導數為0求最小

def optimizer_lsm(model, X, y, reg_lambda=0):"""輸入:- model: 模型- X: tensor, 特征數據,shape=[N,D]- y: tensor,標簽數據,shape=[N]- reg_lambda: float, 正則化系數,默認為0輸出:- model: 優化好的模型"""N, D = X.shape# 對輸入特征數據所有特征向量求平均x_bar_tran = paddle.mean(X,axis=0).T # 求標簽的均值,shape=[1]y_bar = paddle.mean(y)# paddle.subtract通過廣播的方式實現矩陣減向量x_sub = paddle.subtract(X,x_bar_tran)# 使用paddle.all判斷輸入tensor是否全0if paddle.all(x_sub==0):model.params['b'] = y_barmodel.params['w'] = paddle.zeros(shape=[D])return model# paddle.inverse求方陣的逆tmp = paddle.inverse(paddle.matmul(x_sub.T,x_sub)+reg_lambda*paddle.eye(num_rows = (D)))w = paddle.matmul(paddle.matmul(tmp,x_sub.T),(y-y_bar))b = y_bar-paddle.matmul(x_bar_tran,w)model.params['b'] = bmodel.params['w'] = paddle.squeeze(w,axis=-1)return model

五.模型訓練

模型的評價指標和損失函數一致,都為均方誤差。

通過上文實現的線性回歸類來擬合訓練數據,并輸出模型在訓練集上的損失。

input_size = 1
model = Linear(input_size)
model = optimizer_lsm(model,X_train.reshape([-1,1]),y_train.reshape([-1,1]))
print("w_pred:",model.params['w'].item(), "b_pred: ", model.params['b'].item())y_train_pred = model(X_train.reshape([-1,1])).squeeze()
train_error = mean_squared_error(y_true=y_train, y_pred=y_train_pred).item()
print("train error: ",train_error)

model_large = Linear(input_size)
model_large = optimizer_lsm(model_large,X_train_large.reshape([-1,1]),y_train_large.reshape([-1,1]))
print("w_pred large:",model_large.params['w'].item(), "b_pred large: ", model_large.params['b'].item())y_train_pred_large = model_large(X_train_large.reshape([-1,1])).squeeze()
train_error_large = mean_squared_error(y_true=y_train_large, y_pred=y_train_pred_large).item()
print("train error large: ",train_error_large)

六.模型評估

用訓練好的模型預測一下測試集的標簽,并計算在測試集上的損失。

y_test_pred = model(X_test.reshape([-1,1])).squeeze()
test_error = mean_squared_error(y_true=y_test, y_pred=y_test_pred).item()
print("test error: ",test_error)
y_test_pred_large = model_large(X_test.reshape([-1,1])).squeeze()
test_error_large = mean_squared_error(y_true=y_test, y_pred=y_test_pred_large).item()
print("test error large: ",test_error_large)

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

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

相關文章

UE5學習筆記 FPS游戲制作29 更換武器時更換武器的圖標

文章目錄 制作物體圖標UI添加獲取武器圖標的方法使用事件分發器,通知UI要換槍定義事件分發器調用事件分發器注冊事件分發器 制作物體圖標UI 在Fpp-UI上添加一個圖片,改名為五weaponIcon,勾選SizeToContent,錨點放在右下角,對齊改…

RCE(自增、取反、異或)

自增: 也就是說,a > b,b > c... 所以,我們只要能拿到一個變量,其值為a,通過自增操作即可獲得a-z中所有字符。 無字母數字構造: 所有敏感字符串(ASSERT、_POST)通過自增動態生…

從架構角度談談云原生架構

1、云原生架構起源 隨著云服務商的成熟,客戶面臨著將服務直接使用云平臺的服務部署在云平臺上,或者采用本地和云上混合部署的模式來對外提供服務,從解決方案的角度來說,采用云原生架構的優點有: 可以利用云服務的管理…

Zcanpro搭配USBCANFD-200U在新能源汽車研發測試中的應用指南(周立功/致遠電子)

——國產工具鏈的崛起與智能汽車測試新范式 引言:新能源汽車測試的國產化突圍 隨著新能源汽車智能化、網聯化程度的提升,研發測試面臨三大核心挑戰:多協議融合(CAN FD/LIN/以太網)、高實時性數據交互需求、復雜工況下…

【Verilog】實驗十 帶倒計時交通燈控制電路設計

目錄 一、實驗目的 二、實驗環境 三、實驗任務 四、實驗原理與實驗步驟 1. 實驗原理 2. 實驗步驟 五、實驗思考 代碼 TOP.v trafic2_2.v shumaguan.v clk_div.v 一、實驗目的 1. 掌握同步有限狀態機的設計方法。 2. 采用狀態機的設計方法,設計實現帶倒…

Linux : System V 共享內存

目錄 一 前言 二 共享內存概念 三 共享內存創建 四 查看共享內存 五 共享內存的刪除 六 共享內存的關聯 七 共享內存去關聯 八 共享內存的使用(通信) 九 共享內存的特點 一 前言 共享內存區是最快的IPC形式(進程間通信&#xff1…

Spring Cloud 2023.x安全升級:OAuth2.1與JWT動態輪換實戰

引言:當安全遇上云原生,零停機密鑰輪換成為剛需 在微服務架構中,OAuth2.1與JWT已成為身份驗證的黃金標準,但傳統方案存在兩大痛點: 密鑰輪換風險:手動替換JWT密鑰需重啟服務,導致短暫鑒權中斷&…

創建私人阿里云docker鏡像倉庫

一.登錄阿里云 https://cr.console.aliyun.com/cn-hangzhou/instances 二.創建個人實例 【實例列表】 》【創建個人實例】 》【設置Registry登錄密碼】 三.創建命名空間 步驟:【個人實例】》【命名空間】》【創建命名空間】 注:一個賬號最多可以創建3個命名空…

oracle基礎知識視圖的定義和應用

1.1 視圖的定義 視圖(View)是數據庫中非常重要的內容,在實際開發中必須學會視圖的編寫。 用于產生視圖的表叫做該視圖的基表。一個視圖也可以從另一個視圖中產生。視圖是可以嵌套的。 視圖的定義存在數據庫中,與此定義相關的數據并沒有再存一份于數據庫中…

邊緣計算:工業自動化的智能新引擎

在工業4.0的浪潮中,工業自動化正經歷著前所未有的變革。隨著物聯網(IoT)技術的普及,越來越多的工業設備被連接到網絡中,產生了海量的數據。然而,傳統的云計算架構在處理這些實時性要求極高的工業數據時&…

12-SpringBoot3入門-項目打包和運行

1、打包 1&#xff09;打包插件 pom.xml <!--SpringBoot應用打包插件--> <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plu…

【PCIE711-214】基于PCIe總線架構的4路HD-SDI/3G-SDI視頻圖像模擬源

產品概述 PCIE711-214是一款基于PCIE總線架構的4路SDI視頻模擬源。該板卡為標準的PCIE插卡&#xff0c;全高尺寸&#xff0c;適合與PCIE總線的工控機或者服務器&#xff0c;板載協議處理器&#xff0c;可以通過PCIE總線將上位機的YUV 422格式視頻數據下發通過SDI接口播放出去&…

PipeWire 音頻設計與實現分析一——介紹

PipeWire 是一個基于圖的媒體處理引擎&#xff0c;一個可以運行多媒體節點圖的媒體服務器&#xff0c;是 Linux 的音頻/視頻總線&#xff0c;它管理 Linux 系統中&#xff0c;不同應用程序對音頻和視頻設備的共享訪問。它提供了一個本地客戶端音頻 API&#xff0c;但也提供兼容…

使用卷積神經網絡識別MNIST數據集

卷積神經網絡 卷積神經網絡本質是共享權重稀疏鏈接的全連接網絡 編寫步驟 構建一個神經網絡&#xff0c;步驟是幾乎不變的&#xff0c;大概有以下幾步 準備數據集 #更高級的CNN網絡 import torch import torch.nn as nn import torch.nn.functional as F import torchvisi…

力扣125.驗證回文串

如果在將所有大寫字符轉換為小寫字符、并移除所有非字母數字字符之后&#xff0c;短語正著讀和反著讀都一樣。則可以認為該短語是一個 回文串 。 字母和數字都屬于字母數字字符。 給你一個字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 true &#xff1b;否則&#…

UR機械臂sim2real推薦包

推薦一個和ur機械臂配套的interface&#xff1a; ur_rtde Universal Robots RTDE C Interface — ur_rtde 1.6.0 documentation 也歡迎大家提供新想法和bug

CST學習筆記(三)MATLAB與CST聯合仿真-遠場數據批量導出

CST學習筆記&#xff08;三&#xff09;MATLAB與CST聯合仿真-遠場數據批量導出 一、直接數據導出 &#xff08;1&#xff09;打開遠場&#xff0c;調至笛卡爾坐標系 &#xff08;2&#xff09;然后點擊post processing → Import/Export → Plot Data (ASCII) &#xff0c;即…

藍橋杯---BFS解決FloofFill算法1---圖像渲染

文章目錄 1.算法簡介2.題目概述3.算法原理4.代碼分析 1.算法簡介 這個算法是關于我們的floodfill的相關的問題&#xff0c;這個算法其實從名字就可以看出來&#xff1a;洪水灌溉&#xff0c;其實這個算法的過程就和他的名字非常相似&#xff0c;下面的這個圖就生動的展示了這個…

我與數學建模之啟程

下面的時間線就是從我的大二上開始 9月開學就迎來了本科階段最重要的數學建模競賽——國賽&#xff0c;這個比賽一般是在9月的第二周開始。 2021年國賽是我第一次參加國賽&#xff0c;在報名前我還在糾結隊友&#xff0c;后來經學長推薦找了另外兩個學長。其實第一次國賽沒啥…

利用 SSRF 和 Redis 未授權訪問進行內網滲透

目錄 環境搭建 ?編輯 發現內網存活主機 ?編輯 掃描內網端口 ?編輯 利用 Redis 未授權訪問進行 Webshell 寫入 步驟1&#xff1a;生成 payload 方式1&#xff1a;使用python生成 payload 方式二&#xff1a;使用 Gopher 工具 步驟 2&#xff1a;寫入 Webshell&#xf…