我有一个图片文件夹,下面有两个子文件夹。其中一个文件夹为窃电用户图像,另外一个文件夹为非窃电用户图像。一共有600张图像,窃电用户和非窃电用户各300张。请帮我写出按照8:1:1的比例将600张图像划分为训练集、验证集和测试集并创建文件夹
时间: 2024-03-04 10:48:45 浏览: 56
好的,我可以为您提供Python代码来实现此操作。请确保您有Python环境和必要的库(如os和shutil)。
```python
import os
import shutil
import random
# 设置路径变量
data_dir = 'path/to/data/directory'
train_dir = 'path/to/train/directory'
val_dir = 'path/to/validation/directory'
test_dir = 'path/to/test/directory'
# 创建训练集、验证集和测试集文件夹
if not os.path.exists(train_dir):
os.makedirs(train_dir)
if not os.path.exists(val_dir):
os.makedirs(val_dir)
if not os.path.exists(test_dir):
os.makedirs(test_dir)
# 设置比例
train_ratio = 0.8
val_ratio = 0.1
test_ratio = 0.1
# 获取文件夹中的所有文件名
filenames = os.listdir(data_dir)
# 随机打乱文件名
random.shuffle(filenames)
# 计算每个集合的文件数
num_train = int(len(filenames) * train_ratio)
num_val = int(len(filenames) * val_ratio)
num_test = int(len(filenames) * test_ratio)
# 分配文件名到每个集合
train_filenames = filenames[:num_train]
val_filenames = filenames[num_train:num_train+num_val]
test_filenames = filenames[num_train+num_val:]
# 将文件分配到对应的集合文件夹
for filename in train_filenames:
src_path = os.path.join(data_dir, filename)
dst_path = os.path.join(train_dir, filename)
shutil.copy(src_path, dst_path)
for filename in val_filenames:
src_path = os.path.join(data_dir, filename)
dst_path = os.path.join(val_dir, filename)
shutil.copy(src_path, dst_path)
for filename in test_filenames:
src_path = os.path.join(data_dir, filename)
dst_path = os.path.join(test_dir, filename)
shutil.copy(src_path, dst_path)
```
在上面的代码中,您需要将路径变量更改为您实际使用的路径。此代码将按照8:1:1的比例将文件夹中的图像分配到训练集、验证集和测试集文件夹中。
阅读全文