我正在嘗試創建一個安裝腳本,能夠爲我設置一個工作區,這樣我就不需要手動完成了。 我開始在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