如何理解和區分訓練集、測試集和驗證集

如何理解和區分訓練集、測試集和驗證集

在這里插入圖片描述

🌈 個人主頁:高斯小哥
🔥 高質量專欄:Matplotlib之旅:零基礎精通數據可視化、Python基礎【高質量合集】
💡 創作高質量博文,分享更多關于深度學習、PyTorch、Python領域的優質內容!(希望得到您的關注~)


🌵文章目錄🌵

  • 一、概念回顧 🧠
  • 二、基于PyTorch劃分訓練集、驗證集、測試集 🔥
  • 三、模型訓練與評估 🔥
  • 四、總結 🎉
  • 五、最后 🤝

??👋大家好,歡迎來到我的博客!在機器學習和深度學習的世界里,數據集被劃分為訓練集、驗證集和測試集是非常重要的。這些集合各自扮演著不同的角色,確保我們的模型能夠準確地學習和泛化。今天,我將通過PyTorch的示例代碼來詳細解釋如何理解和區分這三個集合。

關鍵詞:#機器學習 #深度學習 #訓練集 #驗證集 #測試集 #PyTorch #數據劃分 #模型訓練與評估

一、概念回顧 🧠

  • 訓練集(Training Set):用于訓練模型的數據集。模型通過學習訓練集中的數據來擬合數據分布并學習規律。
  • 驗證集(Validation Set):用于驗證模型性能的數據集。在模型訓練過程中,我們使用驗證集來調整模型參數和超參數,以優化模型性能。驗證集幫助我們在調整模型時避免過擬合。
  • 測試集(Test Set):用于評估模型性能的數據集。在模型訓練完成后,我們使用測試集來評估模型的泛化能力,即模型在未知數據上的表現。測試集應該是完全獨立的,從未參與模型的訓練或驗證。

二、基于PyTorch劃分訓練集、驗證集、測試集 🔥

??在PyTorch中,我們通常使用torch.utils.data.Datasettorch.utils.data.DataLoader來處理數據集。首先,我們需要創建一個繼承自Dataset的自定義數據集類,然后使用DataLoader來加載數據并提供批量處理、打亂等功能。

??下面是一個簡單的例子,展示了如何創建一個自定義數據集類,并劃分為訓練集、驗證集和測試集。

import torch
from torch.utils.data import Dataset, DataLoader
from sklearn.model_selection import train_test_split# 假設我們有一個簡單的數據集,包含特征和標簽
features = torch.randn(1000, 10)  # 1000個樣本,每個樣本10個特征
labels = torch.randint(0, 2, (1000,))  # 1000個樣本的二分類標簽# 劃分數據集為訓練集和臨時集(驗證集+測試集)
X_train, X_temp, y_train, y_temp = train_test_split(features, labels, test_size=0.4, random_state=42)# 進一步劃分臨時集為驗證集和測試集
X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42)# 自定義數據集類
class MyDataset(Dataset):def __init__(self, features, labels):self.features = featuresself.labels = labelsdef __len__(self):return len(self.labels)def __getitem__(self, idx):return self.features[idx], self.labels[idx]# 創建數據集實例
train_dataset = MyDataset(X_train, y_train)
val_dataset = MyDataset(X_val, y_val)
test_dataset = MyDataset(X_test, y_test)# 創建數據加載器
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)

三、模型訓練與評估 🔥

??現在,我們有了訓練集、驗證集和測試集的數據加載器,接下來是訓練模型并使用驗證集進行調整,最后使用測試集評估模型的性能。

import torch.nn as nn
import torch.optim as optim# 定義一個簡單的模型
class SimpleModel(nn.Module):def __init__(self):super(SimpleModel, self).__init__()self.fc = nn.Linear(10, 2)def forward(self, x):return self.fc(x)# 實例化模型、損失函數和優化器
model = SimpleModel()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)# 訓練模型
num_epochs = 10
for epoch in range(num_epochs):model.train()  # 設置模型為訓練模式train_loss = 0.0for inputs, labels in train_loader:optimizer.zero_grad()  # 清空梯度outputs = model(inputs)  # 前向傳播loss = criterion(outputs, labels)  # 計算損失loss.backward()  # 反向傳播optimizer.step()  # 更新參數train_loss += loss.item() * inputs.size(0)  # 累加損失train_loss /= len(train_loader.dataset)  # 計算平均損失print(f"Epoch [{epoch+1}/{num_epochs}], Loss: {train_loss:.4f}")# 使用驗證集評估模型性能model.eval()  # 設置模型為評估模式val_loss = 0.0val_accuracy = 0.0with torch.no_grad():  # 不需要計算梯度for inputs, labels in val_loader:outputs = model(inputs)loss = criterion(outputs, labels)val_loss += loss.item() * inputs.size(0)# 計算準確率_, predicted = torch.max(outputs, 1)correct = (predicted == labels).sum().item()val_accuracy += correct / inputs.size(0)val_loss /= len(val_loader.dataset)val_accuracy /= len(val_loader)print(f"Validation Loss: {val_loss:.4f}, Accuracy: {val_accuracy:.4f}")# 使用測試集評估模型性能
model.eval()  # 保持模型為評估模式
test_loss = 0.0
test_accuracy = 0.0with torch.no_grad():  # 不需要計算梯度for inputs, labels in test_loader:outputs = model(inputs)loss = criterion(outputs, labels)test_loss += loss.item() * inputs.size(0)# 計算準確率_, predicted = torch.max(outputs, 1)correct = (predicted == labels).sum().item()test_accuracy += correct / inputs.size(0)test_loss /= len(test_loader.dataset)
test_accuracy /= len(test_loader)print(f"Test Loss: {test_loss:.4f}, Accuracy: {test_accuracy:.4f}")

四、總結 🎉

??通過上面的代碼和解釋,我們了解了如何在PyTorch中創建數據集、劃分訓練集、驗證集和測試集,并使用這些集合來訓練和評估模型。在實際應用中,通常還需要進行更多的數據預處理步驟,如數據清洗、特征工程等。此外,模型的性能也可以通過其他指標來評估,如精確度、召回率、F1分數等,具體取決于問題的性質和目標。

??希望這篇博客能幫助你更好地理解和區分訓練集、驗證集和測試集,并在實踐中應用它們來構建和評估機器學習模型!🚀


五、最后 🤝

??親愛的讀者,感謝您每一次停留和閱讀,這是對我們最大的支持和鼓勵!🙏在茫茫網海中,您的關注讓我們深感榮幸。您的獨到見解和建議,如明燈照亮我們前行的道路。🌟若在閱讀中有所收獲,一個贊或收藏,對我們意義重大。

??我們承諾,會不斷自我挑戰,為您呈現更精彩的內容。📚有任何疑問或建議,歡迎在評論區暢所欲言,我們時刻傾聽。💬讓我們攜手在知識的海洋中航行,共同成長,共創輝煌!🌱🌳感謝您的厚愛與支持,期待與您共同書寫精彩篇章!

??您的點贊👍、收藏🌟、評論💬和關注💖,是我們前行的最大動力!

??🎉 感謝閱讀,祝你編程愉快! 🎉

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

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

相關文章

靡語IT:Vue精講(一)

Vue簡介 發端于2013年的個人項目,已然成為全世界三大前端框架之一,在中國大陸更是前端首選。 它的設計思想、編碼技巧也被眾多的框架借鑒、模仿。 紀略 2013年,在Google工作的尤雨溪,受到Angular的啟發,從中提取自…

soc(十七) SOC市場分類

桌面服務器集中式服務器架構和基于ARM微服務器架構的存儲差別在哪? http://www.dostor.com/p/54167.html 手機飛行器汽車家庭監控安防路由器

【前端素材】推薦優質后臺管理系統Protable平臺模板(附源碼)

一、需求分析 后臺管理系統是一種用于管理和監控網站、應用程序或系統的在線工具。它通常是通過網頁界面進行訪問和操作,用于管理網站內容、用戶權限、數據分析等。當我們從多個層次來詳細分析后臺管理系統時,可以將其功能和定義進一步細分,…

華為配置CAPWAP雙棧覆蓋業務示例

配置CAPWAP雙棧覆蓋業務示例 組網圖形 圖1 配置CAPWAP雙棧覆蓋業務示例組網圖 業務需求組網需求數據規劃配置思路配置注意事項操作步驟配置文件 業務需求 企業用戶接入WLAN網絡,以滿足移動辦公的最基本需求。且在覆蓋區域內移動發生漫游時,不影響用戶的業…

解決 PLC QModbusTcpClient 通信自動斷開

項目場景: 提示:這里簡述項目相關背景: 例如:項目場景:QModbusTcpClient 通信 問題描述 提示:這里描述項目中遇到的問題: QModbusTcpClient 連接后,稍微停一段時間,就…

LeetCode10. Regular Expression Matching——完全背包

文章目錄 一、題目二、題解 一、題目 Given an input string s and a pattern p, implement regular expression matching with support for ‘.’ and ‘*’ where: ‘.’ Matches any single character.???? ‘*’ Matches zero or more of the preceding element. The…

【selenium】三大切換 iframe 彈窗alert 句柄window 和 鼠標操作

目錄 一、iframe 1、切換方式: 1、第一種情況: 2、第二種情況: 方式1: 先找到iframe,定位iframe元素(可以通過元素定位的各種方式:xpath,css等等),用對象接收&…

MyBatis Plus中的動態表名實踐

隨著數據庫應用的不斷發展,面對復雜多變的業務需求,動態表名的處理變得愈發重要。在 MyBatis Plus(以下簡稱 MP)這一優秀的基于 MyBatis 的增強工具的支持下,我們可以更便捷地應對動態表名的挑戰。本文將深入研究如何在…

美創新一代數據安全管理平臺宣傳片「龍」重登場

美創新一代數據安全管理平臺(DSM Cloud)產品宣傳片 國產化、混合多云環境催生愈加復雜的數據安全防護、管理及可持續運營挑戰。 美創新一代數據安全管理平臺(DSM Cloud),圍繞韌性數據安全體系,聚焦全域數據…

[HTML]Web前端開發技術27(HTML5、CSS3、JavaScript )JavaScript基礎——喵喵畫網頁

希望你開心,希望你健康,希望你幸福,希望你點贊! 最后的最后,關注喵,關注喵,關注喵,佬佬會看到更多有趣的博客哦!!! 喵喵喵,你對我真的…

activeMq將mqtt發布訂閱轉成消息隊列

1、activemq.xml置文件新增如下內容 2、mqttx測試發送: 主題(配置的模糊匹配,為了并發):VirtualTopic/device/sendData/12312 3、mqtt接收的結果 4、程序處理 package comimport cn.hutool.core.date.DateUtil; imp…

ReactNative進階(二十三)error: no type or protocol named ‘RCTBridgeModule’問題修復

文章目錄 一、前言三、拓展閱讀 一、前言 Jenkins組包RN技術棧實現的iOS應用時&#xff0c;遇到以下錯誤提示信息&#xff1a; error: no type or protocol named ‘RCTBridgeModule’ interface RCTEventDispatcher : NSObject <RCTBridgeModule>error: cannot find i…

【AIGC】基于深度學習的圖像生成與增強技術

摘要&#xff1a; 本論文探討基于深度學習的圖像生成與增強技術在圖像處理和計算機視覺領域的應用。我們綜合分析了主流的深度學習模型&#xff0c;特別是生成對抗網絡&#xff08;GAN&#xff09;和變分自編碼器&#xff08;VAE&#xff09;等&#xff0c;并就它們在實際應用中…

嵌入式linux開發 (三十四) 內存管理2.0(6) 各種段(.code .rodata .data .bss .stack .heap)的含義

我們知道, 邏輯程序在連接的時候在elf 文件中會有 .code .rodata .data 然后在內存中才會有 .code .rodata .data那么為什么鏈接器在鏈接生成的elf文件中會有這些段呢?這涉及到鏈接器的歷史問題

小程序性能優化

背景 在開發小程序的過程中我們發現&#xff0c;小程序的經常會遇到性能問題&#xff0c;尤其是在微信開發者工具的時候更是格外的卡&#xff0c;經過排查發現&#xff0c;卡頓的頁面有這么多的js代碼需要加載&#xff0c;而且都是在進入這個頁面的時候加載&#xff0c;這就會…

Java架構師之路九、設計模式:常見的設計模式,如單例模式、工廠模式、策略模式、橋接模式等

目錄 常見的設計模式&#xff1a; 單例模式&#xff1a; 工廠模式&#xff1a; 策略模式&#xff1a; 橋接模式&#xff1a; 責任鏈模式&#xff1a; Java架構師之路八、安全技術&#xff1a;Web安全、網絡安全、系統安全、數據安全等-CSDN博客Java架構師之路十、框架和工…

Android 仿信號格子強度動畫效果實現

效果圖 在 Android 中&#xff0c;如果你想要繪制一個圓角矩形并使其居中顯示&#xff0c;你可以使用 Canvas 類 drawRoundRect 方法。要使圓角矩形居中&#xff0c;你需要計算矩形的位置&#xff0c;這通常涉及到確定矩形左上角的位置&#xff08;x, y&#xff09;&#xff0…

Leetcode 第 384 場周賽題解

Leetcode 第 384 場周賽題解 Leetcode 第 384 場周賽題解題目1&#xff1a;3033. 修改矩陣思路代碼復雜度分析 題目2&#xff1a;3034. 匹配模式數組的子數組數目 I思路代碼復雜度分析 題目3&#xff1a;3035. 回文字符串的最大數量思路代碼復雜度分析 題目4&#xff1a;3036. …

C語言標準庫介紹:<string.h>

在C語言中&#xff0c;<string.h>頭文件是標準庫中的一個重要部分&#xff0c;它定義了一系列操作字符串和字符數組的函數。本文將詳細介紹<string.h>頭文件中包含的22個函數&#xff0c;并提供每個函數的完整示例代碼。 簡介 <string.h>頭文件定義了一個變…

設計模式-工廠模式(Factory Pattern)

一、工廠模式說明 工廠模式是一種創建型設計模式&#xff0c;它提供了一種將對象的創建與使用分離的方式。工廠模式通過引入一個公共的接口來創建對象&#xff0c;而不是通過直接調用構造函數來創建對象。這樣做的好處是使得代碼更加靈活&#xff0c;更容易維護和擴展。 工廠模…