Вот базовый подход R, который может работать для вас. Это не то, что я бы назвал элегантным, но это относительно легко понять.
Обязательно замените ~/Stack Overflow/
тем каталогом, в котором находится ваш каталог train
.
Короче говоря, мы используем dir.create
для создания новых каталогов (если они не существуют) уже). Затем мы используем list.files
, чтобы составить список файлов в каждом из двух обучающих каталогов. Затем мы используем sample
, чтобы взять образец этих файлов. Наконец, мы используем file.copy
, чтобы разместить их в новом доме.
setwd("~/Stack Overflow/")
sample.fraction <- 0.2
train.true.dir <- "train/hot_dog"
train.false.dir <- "train/not_hot_dog"
valid.true.dir <- "validation/hot_dog"
valid.false.dir <- "validation/not_hot_dog"
sapply(c("validation",valid.true.dir,valid.false.dir),function(x){dir.create(x,showWarnings = FALSE)})
true.files <- list.files(train.true.dir)
false.files <- list.files(train.false.dir)
true.sample <- sample(true.files,size = ceiling(length(true.files) * sample.fraction))
false.sample <- sample(false.files,size = ceiling(length(false.files) * sample.fraction))
sapply(true.sample,function(x){file.copy(paste(train.true.dir,x,sep="/"),paste(valid.true.dir,x,sep="/"))})
sapply(false.sample,function(x){file.copy(paste(train.false.dir,x,sep="/"),paste(valid.false.dir,x,sep="/"))})
Если вы захотите впоследствии удалить эти файлы, вы можете использовать эти две строки.
Сначала сделайте резервную копию.
sapply(true.sample,function(x){file.remove(paste(train.true.dir,x,sep="/"))})
sapply(false.sample,function(x){file.remove(paste(train.false.dir,x,sep="/"))})