分類資料集劃分訓練級和驗證級的script

2021-10-06 18:18:37 字數 3696 閱讀 9053

思路:

在特定路徑下建立train,val的資料夾

用列表放資料集下種類的名稱

根據上面的列表,分別在train和val路徑下建立class類別名稱的資料夾

遍歷每一張,並判斷是否在驗證集的列表名稱中,如果是,則複製copy到驗證級特定種類的路徑下,否則就複製到訓練集特定種類的路徑下

import os

from shutil import copy

import random

### 該指令碼與file_path同級

file_path =

'flower_data'

# 檔案路徑

data_path =

'flower_data/flower_photos'

# 資料路徑

defmkfile

(file_dir):if

not os.path.exists(file_dir)

: os.mkdir(file_dir)

return file_dir

file

='flower_data/flower_photos'

# 獲取資料集上每個種類的名字

flow_class =

[cla for cla in os.listdir(data_path)

if'.txt'

notin cla]

# 在flower_data建立train資料夾

train_dir = mkfile(file_path+

'/'+

"train"

)# 在train資料夾下建立每乙個種類的資料夾

for cla in flow_class:

mkfile(train_dir +

'/'+cla)

# 在flower_data建立val資料夾

val_dir = mkfile(file_path +

'/'+

"val"

)# 在val資料夾下建立每乙個種類的資料夾

for cla in flow_class:

mkfile(val_dir +

'/'+ cla)

# 劃分的比例

split_rate =

0.1for cla in flow_class:

cla_path = data_path +

'/'+ cla

# 獲取種類下的檔名,以列表的方式儲存

images = os.listdir(cla_path)

num =

len(images)

# 在資料中劃分出驗證集

eval_images = random.sample(images, k=

int(num*split_rate)

)for idx, image in

enumerate

(images)

:if image in eval_images:

image_path = cla_path +

'/'+ image

new_path = val_dir +

'/'+ cla

copy(image_path, new_path)

else

: image_path = cla_path +

'/'+ image

new_path = train_dir +

'/'+ cla

copy(image_path, new_path)

print

('\r[{}] processing [{}/{}]'

.format

(cla, idx+

1, num)

, end='')

print()

print

("processing done!"

)

第二個版本(跟上面的差不多)

import os

import random

from shutil import copy

root = os.path.abspath(__file__+

'/..'

)# 根目錄

datapath = root +

'/flower_data'

# 資料路徑

flowerpath = datapath +

'/flower_photos'

# 花資料路徑

defmkfile

(filename):if

not os.path.exists(filename)

: os.mkdir(filename)

return filename

# 獲取資料種類class名

class_list =

[cla for cla in os.listdir(flowerpath)

if'.tx'

notin cla]

print

(class_list)

# 建立train資料夾,並在train資料夾下建立class資料夾

train_path = datapath +

'/train'

mkfile(train_path)

for cla in class_list:

mkfile(train_path+

'/'+cla)

# 建立val資料夾,並在train資料夾下建立class資料夾

val_path = datapath +

'/val'

mkfile(val_path)

for cla in class_list:

mkfile(val_path +

'/'+ cla)

# splitrate = 0.1

for cla in class_list:

flowerdir = flowerpath +

'/'+ cla

imagelist = os.listdir(flowerdir)

imagenum =

len(imagelist)

val_list = random.sample(imagelist,

int(

0.1*imagenum)

)for idx, image in

enumerate

(imagelist)

: srcpath = flowerdir +

'/'+ image

if image in val_list:

newpath = val_path +

'/'+ cla

copy(srcpath, newpath)

else

: newpath = train_path +

'/'+ cla

copy(srcpath, newpath)

print

("\r[{}] processing [{}/{}]"

.format

(cla,idx+

1, imagenum)

, end='')

print()

print

("done!!"

)

python劃分訓練集和驗證集

使用keras訓練模型時,我們需要將分為訓練集和驗證集,下面是使用python實現的劃分資料集的 import os import random import shutil from shutil import copy2 dir name os.listdir data def mk dir mk...

訓練集,測試集和驗證集劃分的意義

訓練集 驗證集和測試集的意義 有了模型後,訓練集就是用來訓練引數的,說準確點,一般是用來梯度下降的。而驗證集基本是在每個epoch完成後,用來測試一下當前模型的準確率。因為驗證集跟訓練集沒有交集,因此這個準確率是可靠的。那麼為啥還需要乙個測試集呢?這就需要區分一下模型的各種引數了。事實上,對於乙個模...

資料集的劃分及交叉驗證

對於比賽,有乙個有標籤的資料集 把資料集劃分為訓練集,驗證集,測試集 吳恩達還提出了訓練 測試集的概念 同時說驗證集和測試集同分布,訓練集和訓練測試集同分布 而實際比賽中劃分的資料集我認為訓練集驗證集測試集都是同分布 乙個資料集劃分出來的 讓你預估標籤的資料集這裡我不把它叫為測試集 在k折交叉驗證中...