# 引入需要的模块
#导入os模块,用于处理操作系统相关的操作,如文件和目录路径操作、环境变量等
import os
#导入zipfile模块,用于处理ZIP文件的创建、读取、写入和解压等操作
import zipfile
#导入random模块,用于生成随机数
import random
#导入json模块,用于处理JSON数据格式的序列化和反序列化
import json
#导入paddle模块,PaddlePaddle是一个开源深度学习平台,提供了丰富的深度学习算法和模型
import paddle
#导入sys模块,用于访问和操作Python运行时环境的一些变量和函数
import sys
#导入numpy模块,并将其重命名为np,用于进行科学计算和数据处理
import numpy as np
#从PIL(Python Imaging Library)模块中导入Image类,用于处理图像文件的读取、显示和保存等操作
from PIL import Image
#导入matplotlib.pyplot模块,并将其重命名为plt,用于绘制图形和可视化数据
import matplotlib.pyplot as plt
#从paddle.io模块中导入Dataset类,用于构建自定义数据集类,继承自Dataset类
from paddle.io import Dataset
#设置随机数生成器的种子值,以确保每次运行程序时生成的随机数序列相同
random.seed(200)
#定义一个为unzip_data的函数,用于解压缩指定路径下的ZIP文件
def unzip_data(src_path,target_path): #(源文件路径,目标路径)
#函数首先检查目标路径下是否存在名为"Chinese Medicine"的文件夹不存在执行以下操作
if(not os.path.isdir(target_path + "Chinese Medicine")):
#使用zipfile.ZipFile类创建一个ZIP文件对象z,以只读模式打开源文件
z = zipfile.ZipFile(src_path, 'r')
#调用extractall方法将ZIP文件中的所有文件和文件夹解压缩到目标路径下
z.extractall(path=target_path)
z.close()
#定义了一个名为get_data_list的函数,用于生成数据列表
def get_data_list(target_path, train_list_path, eval_list_path):
#函数接收三个参数:target_path(目标路径),train_list_path(训练列表路径)和eval_list_path(评估列表路径)
'''
生成数据列表
'''
# 存放所有类别的信息
class_detail = []
# 获取所有类别保存的文件夹名称
data_list_path = target_path + "Chinese Medicine/"
class_dirs = os.listdir(data_list_path)
# 总的图像数量
all_class_images = 0
# 存放类别标签
class_label = 0
# 存放类别数目
class_dim = 0
# 存储要写进eval.txt和train.txt中的内容
trainer_list = []
eval_list = []
# 读取每个类别,['baihe', 'gouqi','jinyinhua','huaihua','dangshen']
for class_dir in class_dirs:
if class_dir != ".DS_Store":
class_dim += 1
# 每个类别的信息
class_detail_list = {}
eval_sum = 0
trainer_sum = 0
# 统计每个类别有多少张图片
class_sum = 0
# 获取类别路径
path = data_list_path + class_dir
# 获取所有图片
img_paths = os.listdir(path)
for img_path in img_paths: # 遍历文件夹下的每个图片
name_path = path + '/' + img_path
# 每8张图片取一个做验证数据
if class_sum % 8 == 0:
eval_sum += 1
#将图片路径和类别标签添加到eval_list中
eval_list.append(name_path + "\t%d" % class_label + "\n")
else:
trainer_sum += 1
trainer_list.append(name_path + "\t%d" % class_label + "\n")
class_sum += 1
all_class_images += 1
# 说明的json文件的class_detail数据
# 类别名称
class_detail_list['class_name'] = class_dir
# 类别标签
class_detail_list['class_label'] = class_label
# 该类数据的测试集数目
class_detail_list['class_eval_images'] = eval_sum
# 该类数据的训练集数目
class_detail_list['class_trainer_images'] = trainer_sum
class_detail.append(class_detail_list)
# 初始化标签列表
train_parameters['label_dict'][str(class_label)] = class_dir
class_label += 1
# 初始化分类数
train_parameters['class_dim'] = class_dim
# 乱序
random.shuffle(eval_list)
#将eval_list中的内容写入到eval_list_path指定的文件中
with open(eval_list_path, 'a') as f:
for eval_image in eval_list:
f.write(eval_image)
random.shuffle(trainer_list)
#将trainer_list中的内容写入到train_list_path指定的文件中
with open(train_list_path, 'a') as f2:
for train_image in trainer_list:
f2.write(train_image)
# 说明的json文件信息 将目标路径、总图像数量和类别详细信息添加到readjson中
readjson = {}
readjson['all_class_name'] = data_list_path # 文件父目录
readjson['all_class_images'] = all_class_images
readjson['class_detail'] = class_detail
jsons = json.dumps(readjson, sort_keys=True, indent=4, separators=(',', ': '))
#将readjson转换为JSON格式的字符串,并写入到train_parameters['readme_path']指定的文件中
with open(train_parameters['readme_path'], 'w') as f:
f.write(jsons)
print('生成数据列表完成!')
#定义一个字典变量train_parameters,用于存储数据集相关的参数信息
train_parameters = {
# 原始数据集路径
"src_path": "/home/aistudio/data/data105575/Chinese Medicine.zip",
# 要解压的路径
"target_path": "/home/aistudio/data/",
"train_list_path": "/home/aistudio/data/train.txt",
"eval_list_path": "/home/aistudio/data/eval.txt",
"label_dict": {},
"readme_path": "/home/aistudio/data/readme.json",
"class_dim": -1,
}
# 从train_parameters字典中获取原始数据集路径,并将其赋值给变量src_path
src_path = train_parameters['src_path']
target_path = train_parameters['target_path']
train_list_path = train_parameters['train_list_path']
eval_list_path = train_parameters['eval_list_path']
# 调用解压函数解压数据集
unzip_data(src_path, target_path)
# 划分训练集与验证集,乱序,生成数据列表
# 每次生成数据列表前,首先清空train.txt和eval.txt
with open(train_list_path, 'w') as f:
f.seek(0)
f.truncate()
with open(eval_list_path, 'w') as f:
f.seek(0)
f.truncate()
# 生成数据列表
get_data_list(target_path, train_list_path, eval_list_path)
#训练数据加载
train_dataset = dataset('/home/aistudio/data',mode='train')
#创建了一个名为train_dataset的训练数据集对象,该对象使用/home/aistudio/data路径下的数据集进行初始化,并将模式设置为train
train_loader = paddle.io.DataLoader(train_dataset, batch_size=32, shuffle=True)
#使用paddle.io.DataLoader创建一个名为train_loader的数据加载器对象,该对象将train_dataset分成大小为32的批次,并在每个周期内随机打乱数据顺序
#评估数据加载
eval_dataset = dataset('/home/aistudio/data',mode='eval')
#创建了一个名为eval_dataset的评估数据集对象,该对象同样使用/home/aistudio/data路径下的数据集进行初始化,并将模式设置为eval
eval_loader = paddle.io.DataLoader(eval_dataset, batch_size = 8, shuffle=False)
#使用paddle.io.DataLoader创建一个名为eval_loader的数据加载器对象,该对象将eval_dataset分成大小为8的批次,并在每个周期内不随
yava_free
- 粉丝: 4802
- 资源: 1848
最新资源
- 美国旧金山28R粗糙跑道数据
- Java编程语言详解与实战指南:从基础到进阶
- 车辆,汽车检测1-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 六轴,scara机器人运动学分析,建模和运动控制 matlab,simulink,simscape.机器人工具箱,DH建模 Pd控制,滑模控制,模糊控制等等
- 课程设计-花卉识别源代码
- “如何帮助缺乏学习动力的小孩子”主题讲座.pptx
- “青少年心理健康”讲座.pptx
- “遵守交通规则,安全出行”知识讲座.pptx
- “师德师风教育”培训讲座教案.pptx
- 如何阅读分享一本书讲座课件.pptx
- 开学第一课“收心主题班会”教案.pptx
- 初中语文开学第一课“走近语文 魅力无穷”.pptx
- LLC全桥仿真方案 用的是数字控制方式 psim软件,可以很直观的学习认识各个位置波形 通过调整PI参数来调试电源 尤其对初学者帮助很大 同时包含mathcad计算
- Python从入门到精通:基础知识与高级应用全面解析
- 储能选址定容,33节点,matpower潮流计算,计算目标函数 考虑储能SOC、储能额定容量、功率约束 NSGA2多目标:储能投资费用和电压偏差最小 熵权TOPSIS确定最优解
- Swift编程语言全面教程:从入门到精通
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈