我是一個能夠將我的數據潛入列表目錄或測試目錄的Python腳本的時刻。我給腳本提供了一個比率,該比例說明了火車/測試之間的比率應該是多少,根據該比率應該隨機將文件移動到訓練或測試。Python腳本將文件移動到列表目錄或測試目錄
ex。如果比例= 0.5,那麼我的數據集的一半會在列車中,另一半在測試中。
其他前。如果比率= 0.25,那麼75%的數據集將在訓練中,其餘的則在測試中。
但分工似乎錯每次..我想單獨的84個文件/顯示目錄和似乎無法砸金42/42分離 - ..任何暗示我能做什麼不同?
下面是代碼:
import sys
import os
import shutil
import numpy
import random
src = sys.argv[1]
destination_data = sys.argv[2]
src_abs = os.path.abspath(src)
destination_data_abs = os.path.abspath(destination_data)
src_files = os.listdir(src_abs)
def copytree(src, dst, symlinks=False, ignore=None, split=0.5):
for item in os.listdir(src):
s = os.path.join(src, item)
d = os.path.join(dst, item)
d_test = os.path.join(dst, 'test', item)
d_train = os.path.join(dst, 'train', item)
print d_test
print d_train
minmax=0.0, 1.0
rand = random.uniform(*minmax)
print rand
if rand > split:
# Inserted into train
if os.path.isdir(s):
shutil.copytree(s, d_train, symlinks, ignore)
print "Copytree used! - TRAIN"
else:
shutil.copy2(s, d_train)
print "Copy 2 used! - TRAIN"
else:
# Inserted into test
if os.path.isdir(s):
shutil.copytree(s, d_test, symlinks, ignore)
print "Copytree used! - TEST"
else:
shutil.copy2(s, d_test)
print "Copy 2 used! - TEST"
copytree(src_abs,destination_data_abs,True)
正在UNIX機器上執行的代碼...如果該事項?
因爲你隨機做,如果你做了很多很多次,你會得到在中心一個完美的50/50分配,但不是每一次運行會50/50分割。我建議生成一個1s和0s的列表,這是你擁有的文件數量的長度,其中1s和0s的比例由你的'split'決定,然後隨機排列列表順序。 編輯:@ user6770522的答案有更好的執行此。 – perfect5th