python3+TensorFlow 2.x 基礎學習(一)

目錄

TensorFlow 2.x基礎

1、安裝 TensorFlow 2.x

2、TensorFlow 2.x 基礎概念

2、1 Eager Execution

2、2 TensorFlow 張量(Tensor)

3、使用Keras構建神經網絡模型

3、1 構建 Sequential 模型

3、2 編譯模型

1、Optimizer(優化器)

2、Loss(損失函數)

3、Metrics(評估指標)

3、3 訓練模型

3、4 評估模型

3、5 預測

4、使用 TensorFlow 2.x 實現自定義訓練循環

5、TensorFlow 2.x 高級功能

5、1 TensorFlow Dataset(數據管道)

5、2 TensorFlow Serving

5、3 TensorFlow Lite(模型優化和部署)

總結


TensorFlow 2.x基礎

TensorFlow 2.x 是一個廣泛使用的深度學習框架,特別適用于神經網絡的構建和訓練。與之前的版本相比,TensorFlow 2.x 提供了更加簡潔和易用的 API,集成了 Keras 作為高層 API,并支持動態圖(Eager Execution)。

1、安裝 TensorFlow 2.x

首先,確保你已經安裝了 TensorFlow 2.x。(Python 3.11.4)可以通過以下命令來安裝:pip install tensorflow 查看:pip show tensorflow
Name: tensorflow
Version: 2.18.0

2、TensorFlow 2.x 基礎概念

2、1 Eager Execution

TensorFlow 2.x 默認啟用 Eager Execution,這意味著操作是即時執行的,計算結果會立刻返回,而不需要構建圖。這樣使得調試更加容易,代碼更具可讀性。

import tensorflow as tf# 啟用 Eager Execution
tf.compat.v1.enable_eager_execution()# 創建一個張量并執行操作
a = tf.constant([1, 2, 3])
b = tf.constant([4, 5, 6])c = a + b  # 即時執行
print(c)  # 輸出結果: tf.Tensor([5 7 9], shape=(3,), dtype=int32)

2、2 TensorFlow 張量(Tensor)

TensorFlow 的核心數據結構是張量(tensor)。張量類似于 NumPy 數組,可以存儲數據并在 TensorFlow 圖中傳遞。你可以創建不同類型的張量:

# 創建張量
t1 = tf.constant([1, 2, 3])  # 一維張量
t2 = tf.constant([[1, 2], [3, 4]])  # 二維張量
# 張量操作
t3 = t1 + 5  # 所有元素加5
print(t3)  # tf.Tensor([6 7 8], shape=(3,), dtype=int32)

3、使用Keras構建神經網絡模型

TensorFlow 2.x 中,Keras 成為默認的高級API。通過Keras可以快速構建和訓練神經網絡。

3、1 構建 Sequential 模型

tf.keras.models.Sequential 是TensorFlow Keras API 中用于構建模型的一種簡單方式。它允許你按順序堆疊多個層(layers),以構建深度學習模型,可以通過 add 方法向模型中添加層。常用的層包括全連接層(Dense)、卷積層(Conv2D)、池化層(MaxPooling2D)等

from tensorflow.keras import layers, models
# 創建一個簡單的 Sequential 模型
model = models.Sequential([#有 128 個神經元,激活函數為 ReLUlayers.Dense(128, activation='relu', input_shape=(784,)),  # 輸入層784 維的向量layers.Dropout(0.2),  # Dropout 層丟棄 20% 的神經元,防止過擬合layers.Dense(10, activation='softmax')  # 輸出層10 個神經元,激活函數為 softmax用于多分類
])# 打印模型概述
model.summary()

3、2 編譯模型

在構建模型后,需要編譯它,選擇優化器、損失函數和評估指標:在深度學習中,optimizer、loss 和 metrics 是模型編譯時的重要參數。下面將詳細解釋這三個參數的含義及其在模型訓練中的作用。

1、Optimizer(優化器)

optimizer='adam' 指定了使用 Adam 優化器。優化器的主要作用是更新模型的權重,以最小化損失函數。Adam 優化器結合了動量和自適應學習率的優點,通常在許多任務中表現良好。

Adam 優化器的特點:自適應學習率:根據每個參數的歷史梯度動態調整學習率。適合大規模數據和高維參數。通常收斂速度快,效果好。

2、Loss(損失函數)

loss='sparse_categorical_crossentropy' 指定了使用稀疏分類交叉熵作為損失函數。損失函數用于衡量模型預測值與真實值之間的差距。

稀疏分類交叉熵的特點:適用于多分類問題,且標簽是整數形式(而不是獨熱編碼)。計算方式是對每個樣本的預測概率與真實標簽的交叉熵進行求和。適合處理類別較多的分類問題。

3、Metrics(評估指標)

metrics=['accuracy'] 指定了在訓練和評估過程中使用的評估指標。在這里,使用的是準確率(accuracy它表示模型預測正確的樣本占總樣本的比例。

準確率的特點:簡單易懂,常用于分類問題。適合類別均衡的數據集,但在類別不均衡時可能會產生誤導。

model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])

3、3 訓練模型

訓練模型時,需要指定訓練數據、標簽、批量大小、訓練的輪數(epochs)等參數:

# 假設我們已經加載了 MNIST 數據集
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()# 預處理數據
train_images = train_images.reshape((train_images.shape[0], 784)).astype('float32') / 255
test_images = test_images.reshape((test_images.shape[0], 784)).astype('float32') / 255# 訓練模型
history = model.fit(train_images, train_labels, epochs=5, batch_size=64, validation_data=(test_images, test_labels))
  • epochs:表示整個訓練數據集將被訓練的次數。設置為5模型將遍歷整個訓練數據集5次

  • batch_size:表示每次迭代中用于訓練的樣本數量。選擇合適的 batch_size對模型的訓練速度和性能有很大影響。常見的選擇有32、64、128等,具體選擇可以根據你的數據集大小和計算資源來決定。

3、4 評估模型

訓練完成后,可以通過 evaluate 函數來評估模型在測試集上的表現:

test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f'Test accuracy: {test_acc}')

model.evaluate(test_images, test_labels):這個函數用于評估模型在測試數據集上的表現。
test_images 是測試集的輸入數據,通常是圖像數據。
test_labels 是對應的標簽,表示每個測試樣本的真實類別。
該函數返回兩個值:test_loss 和 test_acc,分別表示測試集上的損失值和準確率。print(f'Test accuracy: {test_acc}'):

準確率 (Accuracy):正確預測的樣本占總樣本的比例。
精確率 (Precision):正確預測為正類的樣本占所有預測為正類的樣本的比例。
召回率 (Recall):正確預測為正類的樣本占所有實際為正類的樣本的比例。
F1-score:精確率和召回率的調和平均數。

3、5 預測

使用訓練好的模型進行預測:

predictions = model.predict(test_images)
print(predictions[0])  # 打印第一個測試樣本的預測結果

4、使用 TensorFlow 2.x 實現自定義訓練循環

雖然 Keras 提供了便捷的接口,但有時我們需要更多控制,特別是需要自定義訓練循環時。在 TensorFlow 2.x 中,你可以輕松實現自定義的訓練循環。

# 自定義訓練循環
for epoch in range(5):  # 訓練5輪for step, (images, labels) in enumerate(train_dataset):with tf.GradientTape() as tape:predictions = model(images, training=True)loss = tf.losses.sparse_categorical_crossentropy(labels, predictions)# 計算梯度并更新模型參數grads = tape.gradient(loss, model.trainable_variables)optimizer.apply_gradients(zip(grads, model.trainable_variables))

5、TensorFlow 2.x 高級功能

5、1 TensorFlow Dataset(數據管道)

tf.data API 用于構建高效的數據管道,尤其是在處理大規模數據時。可以創建自定義的數據集、批處理和預處理操作。

# 加載數據集并進行預處理
train_dataset = tf.data.Dataset.from_tensor_slices((train_images, train_labels))
train_dataset = train_dataset.shuffle(10000).batch(64)# 迭代數據
for images, labels in train_dataset:print(images.shape, labels.shape)

tf.data.Dataset.from_tensor_slices((train_images, train_labels)):函數將訓練圖像和標簽轉換為一個 tf.data.Dataset 對象。train_images 是一個包含訓練圖像的張量,train_labels 是對應的標簽這個方法會將每個圖像和其對應的標簽配對,形成一個數據集。

train_dataset.shuffle(10000):這個方法用于隨機打亂數據集中的樣本,以提高模型的泛化能力。參數 10000 指定了緩沖區的大小,表示在打亂時會隨機選擇最多10000個樣本進行打亂。這個值可以根據你的數據集大小進行調整。

batch(64):這個方法將數據集分成多個批次,每個批次包含64個樣本。在訓練過程中,模型會一次處理一個批次的數據,這樣可以提高訓練效率并減少內存占用。

5、2 TensorFlow Serving

TensorFlow Serving 是一個為生產環境提供的高效部署服務,它可以幫助你在服務器端進行實時的模型推理。你可以通過 TensorFlow Serving 部署訓練好的模型,并通過 API 進行訪問。

# 啟動 TensorFlow Serving
docker run -p 8501:8501 --name=tf_serving_mnist \--mount type=bind,source=/path/to/saved_model,destination=/models/mnist \-e MODEL_NAME=mnist -t tensorflow/serving

5、3 TensorFlow Lite(模型優化和部署)

TensorFlow Lite 允許將訓練好的模型轉換為適用于移動設備和邊緣設備的格式。通過量化和剪枝等技術,TensorFlow Lite 可以顯著減少模型的大小和計算需求。

# 使用 TensorFlow Lite 轉換模型
tflite_convert --saved_model_dir=/path/to/saved_model --output_file=model.tflite

總結

TensorFlow 2.x 是一個功能強大且靈活的深度學習框架,它集成了許多先進的功能,如 Keras、高效的數據處理 API(tf.data)、Eager Execution 和自動化的模型優化工具。通過簡潔的 API 和強大的性能,TensorFlow 2.x 成為深度學習開發人員的首選框架之一。

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

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

相關文章

AI News(1/21/2025):OpenAI 安全疏忽:ChatGPT漏洞引發DDoS風險/OpenAI 代理工具即將發布

1、OpenAI 的安全疏忽:ChatGPT API 漏洞引發DDoS風險 德國安全研究員 Benjamin Flesch 發現了一個嚴重的安全漏洞:攻擊者可以通過向 ChatGPT API 發送一個 HTTP 請求,利用 ChatGPT 的爬蟲對目標網站發起 DDoS 攻擊。該漏洞源于 OpenAI 在處理…

openlava/LSF 用戶組管理腳本

背景 在openlava運維中經常需要自動化一些常規操作,比如增加用戶組以及組成員、刪除用戶組成員、刪除用戶組等。而openlava的配置文件需要手動修改,然后再通過badmin reconfig激活配置。因此開發腳本將手工操作自動化就很有必要。 通過將腳本中的User…

LLMs的星辰大海:大語言模型的前世今生

文章目錄 一. LLM 的演進:從規則到智能的躍遷 💫1.1 語言模型的蹣跚起步 👶1.2 RNN 與 LSTM:序列建模的嘗試 🧐1.3 Transformer 的橫空出世:自注意力機制的革命 💥1.4 LLM :從預測到…

7-Zip高危漏洞CVE-2025-0411:解析與修復

7-Zip高危漏洞CVE-2025-0411:解析與修復 免責聲明 本系列工具僅供安全專業人員進行已授權環境使用,此工具所提供的功能只為網絡安全人員對自己所負責的網站、服務器等(包括但不限于)進行檢測或維護參考,未經授權請勿利…

數據結構(精講)----樹(應用篇)

特性: 什么是樹: 樹(Tree)是(n>0)個節點的有限集合T,它滿足兩個條件: (1) 有且僅有一個特定的稱為根(Root)的節點。 (2) 其余的節點可以分為m(m≥0)個互不相交的有限集合T1、…

【動態規劃】--- 斐波那契數模型

Welcome to 9ilks Code World (??? ? ???) 個人主頁: 9ilk (??? ? ???) 文章專欄: 算法Journey 🏠 第N個泰波那契數模型 📌 題目解析 第N個泰波那契數 題目要求的是泰波那契數,并非斐波那契數。 &…

如何確保Spring單例Bean在高并發環境下的安全性?

在Spring中,單例Bean就像是一個“公共的水杯”,整個應用程序中的所有線程都會共享這一個實例。在大部分情況下,這沒什么問題,但如果多個線程同時想要修改這個“水杯”里的內容,就可能會出現問題了。 想象一下&#xff…

期刊審稿意見回復的LaTeX模板分享

下載網址 https://github.com/NeuroDong/Latex_for_review_comments 效果展示 分享內容 在學術寫作過程中,回復審稿意見是一個重要且繁瑣的環節。由于審稿人眾多,使用Word進行排版往往效率低下。為了提高效率,我在網上找到了一個LaTeX模板…

Vue 3 30天精進之旅:Day 03 - Vue實例

引言 在前兩天的學習中,我們成功搭建了Vue.js的開發環境,并創建了我們的第一個Vue項目。今天,我們將深入了解Vue的核心概念之一——Vue實例。通過學習Vue實例,你將理解Vue的基礎架構,掌握數據綁定、模板語法和指令的使…

在Vue中,<img> 標簽的 src 值

1. 直接指定 src 的值&#xff08;適用于網絡圖片&#xff09; 如果你使用的是網絡圖片&#xff08;即圖片的URL是完整的HTTP或HTTPS鏈接&#xff09;&#xff0c;可以直接指定 src 的值&#xff1a; vue 復制 <template><div><img src"https://exampl…

Spring Boot/MVC

一、Spring Boot的創建 1.Spring Boot簡化Spring程序的開發,使用注解和配置的方式開發 springboot內置了tomact服務器 tomact:web服務器,默認端口號8080,所以訪問程序使用8080 src/main/java:Java源代碼 src/main/resource:靜態資源或配置文件,存放前端代碼(js,css,html) s…

Spring--SpringMVC的調用流程

一.簡介 1.1主要作用 SSM框架構建起單的技術棧需求&#xff01;其中的SpringMVC負責表述層&#xff08;控制層&#xff09;實現簡化&#xff01; 最終總結&#xff1a; 1. 簡化前端參數接收( 形參列表 )2. 端數據響應(返回值)1.2核心組件和調用流程 Spring MVC與許多其他Web…

C#集合排序的三種方法(List<T>.Sort、LINQ 的 OrderBy、IComparable<T> 接口)

見過不少人、經過不少事、也吃過不少苦&#xff0c;感悟世事無常、人心多變&#xff0c;靠著回憶將往事串珠成鏈&#xff0c;聊聊感情、談談發展&#xff0c;我慢慢寫、你一點一點看...... 1、使用 List<T>.Sort 方法與自定義比較器 public class Person{public string …

從ChatGPT熱潮看智算崛起

2025年1月7日&#xff0c;科智咨詢發布《2025年IDC產業七大發展趨勢》&#xff0c;其中提到“ChatGPT開啟生成式AI熱潮&#xff0c;智能算力需求暴漲&#xff0c;算力供給結構發生轉變”。 【圖片來源于網絡&#xff0c;侵刪】 為何會以ChatGPT發布為節點呢&#xff1f;咱們一起…

Frida使用指南(三)- Frida-Native-Hook

1.Process、Module、Memory基礎 1.Process Process 對象代表當前被Hook的進程,能獲取進程的信息,枚舉模塊,枚舉范圍等 2.Module Module 對象代表一個加載到進程的模塊(例如,在 Windows 上的 DLL,或在 Linux/Android 上的 .so 文件), 能查詢模塊的信息,如模塊的基址、名…

Electron學習筆記,安裝環境(1)

1、支持win7的Electron 的版本是18&#xff0c;這里node.js用的是14版本&#xff08;node-v14.21.3-x86.msi&#xff09;云盤有安裝包 Electron 18.x (截至2023年仍在維護中): Chromium: 96 Node.js: 14.17.0 2、安裝node環境&#xff0c;node-v14.21.3-x86.msi雙擊運行選擇安…

漏洞修復:Apache Tomcat 安全漏洞(CVE-2024-50379) | Apache Tomcat 安全漏洞(CVE-2024-52318)

文章目錄 引言I Apache Tomcat 安全漏洞(CVE-2024-50379)漏洞描述修復建議升級Tomcat教程II Apache Tomcat 安全漏洞(CVE-2024-52318)漏洞描述修復建議III 安全警告引言 解決方案:升級到最新版Tomcat https://blog.csdn.net/z929118967/article/details/142934649 service in…

提示詞的藝術 ---- AI Prompt 進階(提示詞框架)

提示詞的藝術 ---- AI Prompt 進階&#xff08;提示詞框架&#xff09; 寫在前面 上周發布了一篇《提示詞的藝術----AI Prompt撰寫指南》&#xff0c;旨在幫助讀者理解提示詞的作用&#xff0c;以及簡單的提示詞撰寫指南。本篇作為進階內容&#xff0c;將給出常用的提示詞框架…

PyQt4 的圖片切割編輯器

一、 編輯器功能明確 允許用戶加載圖片、選擇切割模式、對切割后的圖片片段進行操作&#xff08;如移動、復制、粘貼、刪除等&#xff09;&#xff0c;并支持撤銷和重做操作。 環境&#xff1a;Py2.7 PyQt 4.11 二、導入模塊介紹 sys: 用于訪問與 Python 解釋器強相關的變…

[MySQL]數據庫表內容的增刪查改操作大全

目錄 一、增加表數據 1.全列插入與指定列插入 2.多行數據插入 3.更新與替換插入 二、查看表數據 1.全列查詢與指定列查詢 2.查詢表達式字段 3.為查詢結果起別名 4.結果去重 5.WHERE條件 6.結果排序 7.篩選分頁結果 8.插入查詢的結果 9.group by子句 三、修改表數…