用Tensorflow進行線性回歸和邏輯回歸(九)

用TensorFlow訓練線性和邏輯回歸模型

這一節結合前面介紹的所有TensorFlow概念來訓練線性和邏輯回歸模型,使用玩具數據集。

用TensorFlow訓練模型

假如我們指明了數據點和標簽的容器,定義了張量操作的損失函數。添加了優化器節點到計算圖,它可以用來計算梯度下降。我們如何重復進行梯度下降來學習數據集呢?

答案是用Python for-循環。代碼塊 Example 3-10說明這個簡單的學習過程。注意為了簡化教學我們不使用 minibatches 。后面訓練大數據集時會用minibatches

使用TensorFlow的線性回歸

這一節我們用Tensor‐Flow 定義線性回歸,并學習它的權重。任務很直接,你可以不用TensorFlow完成。但是,使用TensorFlow 是很好的練習因為它可以將我們學習過的概念一起使用。

用TensorFlow定義和訓練線性回歸

線性回歸模型很簡單:

y = wx + b

這里 w 和 b 是我們要學習的權重。我們轉換這些權重至tf.Variable對象。然后用張量操作來構建損失函數 L2 loss:

?( x, y)=( y ? wx ? b) 2

List3-24的代碼用TensorFlow實現這些數學操作。添加tf.train.AdamOp 優化器來學習以及tf.summary操作來合用TensorBoard。

#List3-24. Defining a linear regression model

#定義模型函數

def model(x,w,b):

??? return tf.multiply(x,w)+b

def loss_fun(x,y,w,b):

??? err = model(x,w,b)-y

??? squared_err = tf.square(err)

??? return tf.reduce_mean(squared_err)

def grad(x,y,w,b):

??? with tf.GradientTape() as tape:

??????? loss_ = loss_fun(x,y,w,b)

??? return tape.gradient(loss_,[w,b])

List3-25 訓練模型 (不用 minibatches).

#List3-25. Training the linear regression model

w = tf.Variable(np.random.randn(),tf.float32)

b = tf.Variable(0.0,tf.float32)

#設置迭代次數和學習率

train_epochs = 100

learning_rate = 0.01

loss = []

y_pred=[]

count = 0

display_count = 10 #控制顯示粒度的參數,每訓練10個樣本輸出一次損失值

#開始訓練,輪數為epoch,采用SGD隨機梯度下降優化方法

for epoch in range(train_epochs):

??? for xs,ys in zip(x_np,y_np):

??????? #計算損失,并保存本次損失計算結果

??????? #rand_index = np.random.choice(100)

??????? #rand_x = tf.cast([x_vals[rand_index]],dtype=tf.float32)

??????? #rand_y =? tf.cast([y_vals[rand_index]],dtype=tf.float32)

??????? loss_ =loss_fun(xs,ys,w,b)

??????? loss.append(loss_)

??????? #計算當前[w,b]的梯度

??????? delta_w,delta_b = grad(xs,ys,w,b)

??????? change_w = delta_w * learning_rate

??????? change_b = delta_b * learning_rate

??????? w.assign_sub(change_w)

??????? b.assign_sub(change_b)

??????? #訓練步數加1

??????? count = count +1

??????? if count % display_count == 0:

??????????? print('train epoch : ','%02d'%(epoch+1),'step:%03d' % (count),'loss= ','{:.9f}'.format(loss_))

為線性回歸取梯度

線性回歸模型的方程為 y = wx + b

其中 w, b是可學習權重。我們前面提過,這個系統的損失是 ? =( y ? wx ? b)2。可以用上些矩陣微積分來計算可學習參數的梯度:

?????????????????

以及

???????????????????

這些方程僅給有好奇心讀者參考。我們不會系統的教如何求損失函數的微分。

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

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

相關文章

使用 vue vxe-table 實現復選框禁用,根據行規則來禁用是否允許被勾選選中

使用 vue vxe-table 實現復選框禁用,根據行規則來禁用是否允許被勾選選中 查看官網:https://vxetable.cn 禁用選中 通過 checkMethod 方法控制 checkbox 是否允許用戶手動勾選,如果被禁用,可以調用 setCheckboxRow 方法手動設置…

【Linux-網絡】深入拆解TCP核心機制與UDP的無狀態設計

🎬 個人主頁:誰在夜里看海. 📖 個人專欄:《C系列》《Linux系列》《算法系列》 ?? 道阻且長,行則將至 目錄 📚引言 📚一、UDP協議 📖 1.概述 📖 2.特點 &#x1…

(nice!!!)(LeetCode 每日一題) 2081. k 鏡像數字的和 (枚舉)

題目:2081. k 鏡像數字的和 思路:枚舉10進制的回文串,然后來判斷對應的k進制數是否是回文串。直到有n個滿意即可。 而枚舉10進制的回文串,從基數p(1、10、100… )開始,長度為奇數的回文串,長度為偶數的回文…

Java面試題027:一文深入了解數據庫Redis(3)

Java面試題025:一文深入了解數據庫Redis(1) Java面試題026:一文深入了解數據庫Redis(2) 本節我們整理一下Redis高可用和消息隊列使用場景的重點原理,讓大家在面試或者實際工作中遇到這類問題時…

算法打卡 day4

4 . 高精度算法 性質:數組或者容器從低位往高位依次存儲大整數,方便進位。 4.1 高精度加法 給定兩個正整數(不含前導 0),計算它們的和。 輸入格式 共兩行,每行包含一個整數。 輸出格式 共一行,…

【筆記】Docker 配置阿里云鏡像加速(公共地址即開即用,無需手動創建實例)

2025年06月25日記 【好用但慎用】Windows 系統中將所有 WSL 發行版從 C 盤遷移到 非系統 盤的完整筆記(附 異常處理)-CSDN博客 【筆記】解決 WSL 遷移后 Docker 出現 “starting services: initializing Docker API Proxy: setting up docker ap” 問題…

day35-Django(1)

day35-Django 3.2 前言 之前我們介紹過web應用程序和http協議,簡單了解過web開發的概念。Web應用程序的本質 接收并解析HTTP請求,獲取具體的請求信息處理本次HTTP請求,即完成本次請求的業務邏輯處理構造并返回處理結果——HTTP響應import socketserver = socket.socket() …

PostgreSQL全棧部署指南:從零構建企業級高可用數據庫集群

PostgreSQL全棧部署指南:從零構建企業級數據庫集群 前言: 本文詳解了**PostgreSQL**所有的部署方式,如 yum 安裝、源碼編譯安裝、RPM包手動安裝,以及如何選擇適合的安裝方式。適合不同的場景應用。通過高可用部署詳細了解安裝思路及過程,包括內網環境下的配置、主節點的創…

MQTT 和 HTTP 有什么本質區別?

MQTT 和 HTTP 的本質區別在于它們設計的初衷和核心工作模式完全不同。它們是為解決不同問題而創造的兩種工具。 簡單來說: HTTP 就像是去圖書館問問題:你(客戶端)主動去找圖書管理員(服務器),…

GtkSharp跨平臺WinForm實現

文章目錄 跨平臺架構設計跨平臺項目配置GtkSharp串口通訊實現跨平臺部署配置Linux系統配置macOS系統配置 相關學習資源GTK#跨平臺開發跨平臺.NET開發Linux開發環境macOS開發環境跨平臺UI框架對比容器化部署開源項目參考性能優化與調試 跨平臺架構設計 基于GTKSystem.Windows.F…

【閑談】對于c++未來的看法

對于C未來看法 C 作為一門誕生于上世紀的編程語言,在軟件工業發展史上扮演了不可替代的角色。盡管近年來諸如 Rust、Go、Swift、Kotlin 等現代語言相繼崛起,C 依然在系統軟件、高性能服務、嵌入式等關鍵領域中發揮著主力作用。本文將從 C 的當前應用前景…

【論文】云原生事件驅動架構在智能風控系統中的實踐與思考

摘要 2023年6月至2024年3月,我作為某頭部證券公司新一代極速交易系統的首席架構師,主導設計并落地了基于云原生事件驅動架構的全新交易風控平臺。該項目旨在攻克原有系統無法支撐峰值20萬筆/秒交易量、風控延遲超過3秒以及行情劇烈波動時系統崩潰等核心痛點。通過構建以Kube…

opensbi從0到1入門學習

最近要在RV64的平臺上把Linux給bringup起來,由于當下的工作主要集中在底層硬件接口驅動、CPU的操作及RTOS應用等,雖然之前搞過Arm Linux的開發工作,但是比較基礎的玩的比較少,所以真正要搞把系統bringup起來,我之前的知…

Python打卡:Day36

復習日 浙大疏錦行

開發過程中的時空權衡:如何優雅地平衡時間與空間效率

文章目錄 恒的開發者困境一、理解時間與空間的基本概念1. 時間復雜度2. 空間復雜度 二、時空權衡的基本原則1. 硬件環境決定優先級2. 應用場景決定策略3. 數據規模的影響 三、實際開發中的權衡策略1. 緩存為王:用空間換時間2. 壓縮數據:用時間換空間3. 預…

RAG 應用實戰指南:從商業目標到系統落地與運營 E2E 實踐

專欄入口 前言 在當今信息爆炸的時代,如何高效地從海量數據中提取有用信息并提供智能問答服務,成為眾多企業關注的焦點。檢索增強生成(Retrieval-Augmented Generation, RAG)技術以其結合了檢索模型的精準性和生成模型的靈活性&a…

關于晨脈的概念解釋

晨脈(Resting Morning Pulse)是指??人體在清晨清醒后、未進行任何活動前??,于臥床狀態下測量的每分鐘脈搏或心率次數。它反映了人體在無運動消耗、無神經干擾時的基礎代謝狀態,是評估心臟功能、身體恢復情況及運動適應性的重要…

自然語言處理入門

一、概念 自然語言處理(Natural Language Processing, 簡稱NLP)是計算機科學與語言中關注于計算機與人類語言間轉換的領域。 二、發展史 2012年:深度學習的崛起 Word2Vec的提出(Mikolov等,2013年正式發表&#xff0c…

【算法 day12】LeetCode 226.翻轉二叉樹 |101. 對稱二叉樹 |104.二叉樹的最大深度|111.二叉樹的最小深度

226.翻轉二叉樹 (前序,后序) 題目鏈接 | 文檔講解 |視頻講解 : 鏈接 1.思路: 翻轉的是指針,不是數值 前序遍歷和后序遍歷都可以 中序不行,中序遍歷的順序是左中右,反轉左指針后,到根節點,…

Spring Boot 整合 Swagger3 如何生成接口文檔?

前后端分離的項目,接口文檔的存在十分重要。與手動編寫接口文檔不同,swagger是一個自動生成接口文檔的工具,在需求不斷變更的環境下,手動編寫文檔的效率實在太低。與新版的swagger3相比swagger2配置更少,使用更加方便。…