Python實(shí)現(xiàn)數(shù)據(jù)集劃分(訓(xùn)練集和測(cè)試集)
前面是分部講解,完整代碼在最后。
導(dǎo)入模塊 :
import os from shutil import copy, rmtree import random
創(chuàng)建文件夾 :
def make_file(file_path: str): if os.path.exists(file_path): rmtree(file_path) os.makedirs(file_path)
劃分?jǐn)?shù)據(jù)集的比例,本文是0.1:驗(yàn)證集的數(shù)量占總數(shù)據(jù)集的10%比如填0.1就是驗(yàn)證集的數(shù)量占總數(shù)據(jù)集的10%
random.seed(0) split_rate = 0.1
數(shù)據(jù)集的存放:新建一個(gè)數(shù)據(jù)文件夾,將劃分的數(shù)據(jù)集存放進(jìn)去
data_path = r'D:\chengxu\data\caodi' # 數(shù)據(jù)集存放的地方 data_root = r'D:\chengxu\data\cd' # 這里是生成的訓(xùn)練集和驗(yàn)證集所處的位置,這里設(shè)置的是在當(dāng)前文件夾下。 data_class = [cla for cla in os.listdir(data_path)] print("數(shù)據(jù)的種類分別為:") print(data_class) # 輸出數(shù)據(jù)種類
建立訓(xùn)練集文件夾:
train_data_root = os.path.join(data_root, "train") # 訓(xùn)練集的文件夾名稱為 train make_file(train_data_root) for num_class in data_class: make_file(os.path.join(train_data_root, num_class))
建立測(cè)試集文件夾:
val_data_root = os.path.join(data_root, "val") # 驗(yàn)證集的文件夾名稱為 val make_file(val_data_root) for num_class in data_class: make_file(os.path.join(val_data_root, num_class))
劃分?jǐn)?shù)據(jù):
for num_class in data_class: num_class_path = os.path.join(data_path, num_class) images = os.listdir(num_class_path) num = len(images) val_index = random.sample(images, k=int(num * split_rate)) # 隨機(jī)抽取圖片 for index, image in enumerate(images): if image in val_index: # 將劃分到驗(yàn)證集中的文件復(fù)制到相應(yīng)目錄 data_image_path = os.path.join(num_class_path, image) val_new_path = os.path.join(val_data_root, num_class) copy(data_image_path, val_new_path) else: # 將劃分到訓(xùn)練集中的文件復(fù)制到相應(yīng)目錄 data_image_path = os.path.join(num_class_path, image) train_new_path = os.path.join(train_data_root, num_class) copy(data_image_path, train_new_path) print("\r[{}] split_rating [{}/{}]".format(num_class, index + 1, num), end="") # processing bar print() print(" ") print(" ") print("劃分成功")
完整代碼:
import os from shutil import copy, rmtree import random def make_file(file_path: str): if os.path.exists(file_path): rmtree(file_path) os.makedirs(file_path) random.seed(0) # 將數(shù)據(jù)集中10%的數(shù)據(jù)劃分到驗(yàn)證集中 split_rate = 0.1 data_path = r'D:\chengxu\data\caodi' # 數(shù)據(jù)集存放的地方,建議在程序所在的文件夾下新建一個(gè)data文件夾,將需要?jiǎng)澐值臄?shù)據(jù)集存放進(jìn)去 data_root = r'D:\chengxu\data\cd' # 這里是生成的訓(xùn)練集和驗(yàn)證集所處的位置,這里設(shè)置的是在當(dāng)前文件夾下。 data_class = [cla for cla in os.listdir(data_path)] print("數(shù)據(jù)的種類分別為:") print(data_class) # 建立保存訓(xùn)練集的文件夾 train_data_root = os.path.join(data_root, "train") # 訓(xùn)練集的文件夾名稱為 train make_file(train_data_root) for num_class in data_class: # 建立每個(gè)類別對(duì)應(yīng)的文件夾 make_file(os.path.join(train_data_root, num_class)) # 建立保存驗(yàn)證集的文件夾 val_data_root = os.path.join(data_root, "val") # 驗(yàn)證集的文件夾名稱為 val make_file(val_data_root) for num_class in data_class: # 建立每個(gè)類別對(duì)應(yīng)的文件夾 make_file(os.path.join(val_data_root, num_class)) for num_class in data_class: num_class_path = os.path.join(data_path, num_class) images = os.listdir(num_class_path) num = len(images) val_index = random.sample(images, k=int(num * split_rate)) # 隨機(jī)抽取圖片 for index, image in enumerate(images): if image in val_index: data_image_path = os.path.join(num_class_path, image) val_new_path = os.path.join(val_data_root, num_class) copy(data_image_path, val_new_path) else: data_image_path = os.path.join(num_class_path, image) train_new_path = os.path.join(train_data_root, num_class) copy(data_image_path, train_new_path) print("\r[{}] split_rating [{}/{}]".format(num_class, index + 1, num), end="") # processing bar print() print(" ") print(" ") print("劃分成功")
到此這篇關(guān)于Python實(shí)現(xiàn)數(shù)據(jù)集劃分(訓(xùn)練集和測(cè)試集)的文章就介紹到這了,更多相關(guān)Python數(shù)據(jù)集劃分內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
通過實(shí)例簡(jiǎn)單了解Python中yield的作用
這篇文章主要介紹了通過實(shí)例簡(jiǎn)單了解Python中yield的作用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12python實(shí)現(xiàn)簡(jiǎn)單顏色識(shí)別程序
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單顏色識(shí)別程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02TensorFlow可視化工具TensorBoard默認(rèn)圖與自定義圖
這篇文章主要介紹了TensorFlow可視化工具TensorBoard默認(rèn)圖與自定義圖的使用操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10Python和GO語言實(shí)現(xiàn)的消息摘要算法示例
這篇文章主要介紹了Python和GO語言實(shí)現(xiàn)的消息摘要算法示例,本文講解了python消息摘要示例、go語言消息摘要示例及各自的運(yùn)行效果,需要的朋友可以參考下2015-03-03如何利用opencv訓(xùn)練自己的模型實(shí)現(xiàn)特定物體的識(shí)別
在Python中通過OpenCV自己訓(xùn)練分類器進(jìn)行特定物體實(shí)時(shí)識(shí)別,下面這篇文章主要給大家介紹了關(guān)于如何利用opencv訓(xùn)練自己的模型實(shí)現(xiàn)特定物體的識(shí)別,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10Python中的數(shù)據(jù)分組統(tǒng)計(jì)、分組運(yùn)算及透視方式
這篇文章主要介紹了Python中的數(shù)據(jù)分組統(tǒng)計(jì)、分組運(yùn)算及透視方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07pycharm中連接mysql數(shù)據(jù)庫的步驟詳解
在進(jìn)行Python研發(fā)的時(shí)候,pycharm是一個(gè)很好的IDE,下面這篇文章主要給大家介紹了pycharm中連接mysql數(shù)據(jù)庫的步驟,文中通過圖文介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。2017-05-05git查看、創(chuàng)建、刪除、本地、遠(yuǎn)程分支方法詳解
這篇文章主要介紹了git查看、創(chuàng)建、刪除、本地、遠(yuǎn)程分支方法詳解,需要的朋友可以參考下2020-02-02