我正在制作一个能够将我的数据潜入火车目录或测试目录的python脚本。我为脚本提供了一个比率,它表示列车/测试之间应该是什么比例,根据文件应该随机移动到训练或测试。
离。如果比率= 0.5那么我的数据集的一半将在列车中而另一半在测试中。
其他前。如果比率= 0.25,那么75%的数据集将在列车中,其余的在测试中。但是这个部门每次似乎都错了。我试图分开84个文件/ dirs并且似乎无法达到金色的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机器上执行......如果这很重要?
答案 0 :(得分:3)
您可以获取文件列表,随机播放,然后拆分相对于拆分比率。
import os
import numpy
src_files = os.listdir(".")
n_files = len(src_files)
split_ratio = 0.5
split_index = int(n_files * split_ratio)
numpy.random.shuffle(src_files)
print src_files[0:split_index]
print src_files[split_index:]