我正在尝试创建一个安装脚本,能够为我设置一个工作区,这样我就不需要手动完成了。 我开始在bash中做这件事,但很快就意识到那不会很好。随机分配文件到列车/测试给定的比例
我的下一个想法是使用python,但似乎无法做到这一点正确的方法..我的想法是做一个列表(列表是一个.txt文件与所有数据文件的路径) ,洗牌这个列表,然后将每个文件移动到我的火车目录或测试目录,给定的比例....
但这是python,是不是有一个更简单的方法来做到这一点,它似乎是我正在做一个理解解决方法只是为了分割文件。
bash代码:
# Partition data randomly into train and test.
cd ${PATH_TO_DATASET}
SPLIT=0.5 #train/test split
NUMBER_OF_FILES=$(ls ${PATH_TO_DATASET} | wc -l) ## number of directories in the dataset
even=1
echo ${NUMBER_OF_FILES}
if [ `echo "${NUMBER_OF_FILES} % 2" | bc` -eq 0 ]
then
even=1
echo "Even is true"
else
even=0
echo "Even is false"
fi
echo -e "${BLUE}Seperating files in to train and test set!${NC}"
for ((i=1; i<=${NUMBER_OF_FILES}; i++))
do
ran=$(python -c "import random;print(random.uniform(0.0, 1.0))")
if [[ ${ran} < ${SPLIT} ]]
then
##echo "test ${ran}"
cp -R $(ls -d */|sed "${i}q;d") ${WORKSPACE_SETUP_ROOT}/../${WORKSPACE}/data/test/
else
##echo "train ${ran}"
cp -R $(ls -d */|sed "${i}q;d") ${WORKSPACE_SETUP_ROOT}/../${WORKSPACE}/data/train/
fi
##echo $(ls -d */|sed "${i}q;d")
done
cd ${WORKSPACE_SETUP_ROOT}/../${WORKSPACE}/data
NUMBER_TRAIN_FILES=$(ls train/ | wc -l)
NUMBER_TEST_FILES=$(ls test/ | wc -l)
echo "${NUMBER_TRAIN_FILES} and ${NUMBER_TEST_FILES}..."
echo $(calc ${NUMBER_TRAIN_FILES}/${NUMBER_OF_FILES})
if [[ ${even} = 1 ]] && [[ ${NUMBER_TRAIN_FILES}/${NUMBER_OF_FILES} != ${SPLIT} ]]
then
echo "Something need to be fixed!"
if [[ $(calc ${NUMBER_TRAIN_FILES}/${NUMBER_OF_FILES}) > ${SPLIT} ]]
then
echo "Too many files in the TRAIN set move some to TEST"
cd train
echo $(pwd)
while [[ ${NUMBER_TRAIN_FILES}/${NUMBER_TEST_FILES} != ${SPLIT} ]]
do
mv $(ls -d */|sed "1q;d") ../test/
echo $(calc ${NUMBER_TRAIN_FILES}/${NUMBER_OF_FILES})
done
else
echo "Too many files in the TEST set move some to TRAIN"
cd test
while [[ ${NUMBER_TRAIN_FILES}/${NUMBER_TEST_FILES} != ${SPLIT} ]]
do
mv $(ls -d */|sed "1q;d") ../train/
echo $(calc ${NUMBER_TRAIN_FILES}/${NUMBER_OF_FILES})
done
fi
fi
我的问题是最后一部分。由于我随机选取数字,我不确定数据是否按照希望分区,我最后一条陈述是检查分区是否正确,如果不正确,则修复它。这是不可能的,因为我正在检查浮点数,通常这个解决方案更像是一个快速修复。
我很想看看一些示例数据和你在bash中遇到的问题。 “分配”是什么意思?你在移动文件吗?将数据插入数组?如果您还可以包含更多关于您用来确定发生的标准的信息,那么我们可能会提供有用的答案。 – ghoti
数据只是.wav文件。我的bash代码的问题是我试图使用浮点运算,这对于bash来说并不理想。我正在将它从_data_文件夹移动到_train_或_test_文件夹 –
好吧,那么您使用什么标准来决定是将某些内容发送到一个文件夹还是另一个文件夹?你能否在你的问题中包含你的非工作代码? – ghoti