欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實現(xiàn)隨機劃分圖片數(shù)據(jù)集的示例代碼

 更新時間:2023年05月21日 15:28:42   作者:風(fēng)吹落葉花飄蕩  
這篇文章主要為大家詳細介紹了如何通過Python實現(xiàn)隨機將圖片與標(biāo)注文件劃分為訓(xùn)練集和測試集,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、前言

前幾天需要劃分?jǐn)?shù)據(jù)集,就寫了一個小demo去完成這個任務(wù)。

隨機劃分圖片數(shù)據(jù)集

任務(wù)描述:我的所有圖片保存在同一個文件夾里,需要隨機將圖片與標(biāo)注文件劃分為訓(xùn)練集和測試集。

處理過程:讀取文件列表,將列表打亂,截取列表一部分

二、實現(xiàn)代碼如下

import os
import random
import shutil

def get_imlist(path):
    return [os.path.join(path, f) for f in os.listdir(path) if f.endswith('.jpg')]

def getData(src_path):

    dest_dir = src_path+'val' #劃分出來的驗證集
    if not os.path.isdir(dest_dir):
        os.mkdir(dest_dir)

    img_list = get_imlist(src_path)
    random.shuffle(img_list)
    le = int(len(img_list) * 0.8)  # 這個可以修改劃分比例
    for f in img_list[le:]:
        shutil.move(f, dest_dir)


'''
函數(shù)功能:
劃分?jǐn)?shù)據(jù)集
'''
def SplitImg(filePath):
    getData(filePath)

'''
函數(shù)功能:
根據(jù)劃分的數(shù)據(jù)集進行移動標(biāo)注文件
'''
def MoveAn(filePathAn,filePathImg):
    Imgs=os.listdir(filePathImg)
    if not os.path.isdir(filePathAn+'val'):
        os.mkdir(filePathAn+'val')

    for file in os.listdir(filePathAn):
        #print(filePathAn,filePathImg)
        #print(os.path.join(filePathAn,file),os.path.join(filePathAn+'val',file))
        if file[:-4]+'.jpg' in Imgs:

            shutil.move(os.path.join(filePathAn,file),os.path.join(filePathAn+'val',file))

if __name__=='__main__':
    filePath='./寵物/寵物'# 換成你的數(shù)據(jù)集

    #拆分的數(shù)據(jù)集
    SplitImg(filePath)
    filePathAn='./寵物/寵物An'# 換成你的標(biāo)注文件地址

    # 根據(jù)數(shù)據(jù)集進行移動標(biāo)注文件
    MoveAn(filePathAn,filePath+'val')

三、方法補充

除了以上的方法,小編還為大家整理了其他劃分?jǐn)?shù)據(jù)集的方法,希望對大家有所幫助

方法一:使用random.sample將數(shù)據(jù)集隨機劃分為訓(xùn)練集與驗證集并另存在文件夾中,設(shè)置隨機種子

import os
import random
import shutil
 

def moveFile(input1,input2,save1,save2):
    pathDir = os.listdir(input1)  # 取圖片的原始路徑
    random.seed(1)
    filenumber = len(pathDir)  # 原文件個數(shù)
    rate = 0.1  # 抽取的驗證集的比例,占總數(shù)據(jù)的多少
    picknumber = int(filenumber * rate)  # 按照rate比例從文件夾中取一定數(shù)量圖片
    sample = random.sample(pathDir, picknumber)  # 隨機選取需要數(shù)量的樣本圖片
    print(sample)
    list_len=len(sample)
    print(list_len)
    list=[]
    for i in range(len(sample)):
        list.append(sample[i].split('.')[0])
    print(list)
    for flie_name in list:
        path_img=os.path.join(input1,flie_name+'.jpg')
        shutil.move(path_img,save1)
        path_lab=os.path.join(input2,flie_name+'.txt')
        shutil.move(path_lab,save2)
 
if __name__ == '__main__':
    input_path1='./train1200/images/train'
    input_path2= './train1200/labels/train'
    save_img='./train1200/images/val'
    save_lab='./train1200/labels/val'
    if not os.path.exists(save_lab):
        os.makedirs(save_lab)
    if not os.path.exists(save_img):
        os.makedirs(save_img)
    moveFile(input_path1,input_path2,save_img,save_lab)

方法二:通過train test_splt函數(shù)實現(xiàn)隨機劃分?jǐn)?shù)據(jù)

Python中,隨機劃分?jǐn)?shù)據(jù)集可以通過train test_splt函數(shù)實現(xiàn)。該函數(shù)可以將數(shù)據(jù)集隨機分成訓(xùn)練集和測試集,用于機器學(xué)習(xí)中的數(shù)據(jù)訓(xùn)練和測試。

函數(shù)的基本用法如下:

from sklearn.model_selection import train_test_split

#X是所有的樣本特征,y是目標(biāo)變量,test_size是測試集占總樣本數(shù)的比例
# random_state是隨機數(shù)發(fā)生器的種子,保證每次劃分結(jié)果一致
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0,3, random_state=42)

其中,X是所有的樣本特征,是目標(biāo)變量,test_size是測試集占總樣本數(shù)的比例。random_state用于設(shè)置隨機數(shù)發(fā)生器的種子,以保i每次劃分結(jié)果一致。函數(shù)會返回4個數(shù)組: X_train、X_test、y_train,y_test,分別代表訓(xùn)練集的特征、測試集的特征、訓(xùn)練集的目標(biāo)變量和測試集的目標(biāo)變量

方法三:將一個數(shù)據(jù)集按比例隨機分割成訓(xùn)練集、驗證集、測試集

import random

def split(fname, train_ratio, var_ratio):
    lines = fname.readlines()
    n_total = len(lines)          # 獲取數(shù)據(jù)集的總長度

    train_offset = int(n_total * train_ratio)
    val_offset = int(n_total * (train_ratio + var_ratio))
    random.shuffle(fname.read())  # 按行打亂順序

    train_data = open('train.txt.bio', 'wb')
    val_data = open('val.txt.bio', 'wb')
    test_data = open('test.txt.bio', 'wb')


    for i, line in enumerate(lines):
        if i < train_offset:
            train_data.write(line)
        elif i < val_offset:
            val_data.write(line)
        else:
            test_data.write(line)

    train_data.close()
    val_data.close()
    test_data.close()


if __name__ == "__main__":
   fname = open('en/en_total.txt.bio', "rb")
   split(fname, train_ratio = 0.6, var_ratio = 0.2)
   fname.close()

到此這篇關(guān)于Python實現(xiàn)隨機劃分圖片數(shù)據(jù)集的示例代碼的文章就介紹到這了,更多相關(guān)Python隨機劃分?jǐn)?shù)據(jù)集內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論