思路:
在特定路徑下建立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折交叉驗證中...