# 引入需要的模块
#导入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的批次,并在每个周期内不随
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于VGG-16的中草药识别项目代码.zip,本项目旨在利用深度学习技术,通过计算机视觉和图像处理的方法,实现对中草药的自动识别和分类。该项目主要采用VGG-16卷积神经网络模型,通过对大量中草药图像进行训练和学习,建立一个高效准确的中草药识别的模型。 基于VGG-16的中草药识别项目代码.zip,本项目旨在利用深度学习技术,通过计算机视觉和图像处理的方法,实现对中草药的自动识别和分类。该项目主要采用VGG-16卷积神经网络模型,通过对大量中草药图像进行训练和学习,建立一个高效准确的中草药识别的模型。 基于VGG-16的中草药识别项目代码.zip,本项目旨在利用深度学习技术,通过计算机视觉和图像处理的方法,实现对中草药的自动识别和分类。该项目主要采用VGG-16卷积神经网络模型,通过对大量中草药图像进行训练和学习,建立一个高效准确的中草药识别的模型。 基于VGG-16的中草药识别项目代码.zip,本项目旨在利用深度学习技术,通过计算机视觉和图像处理的方法,实现对中草药的自动识别和分类。该项目主要采用VGG-16卷积神经网络模型,通过对大量中草药图像进行训练和学习,建立一个高效准
资源推荐
资源详情
资源评论
收起资源包目录
基于VGG-16的中草药识别.zip (6个子文件)
Medical-health-sensors-master
Chinese Medicine Infer.zip 546KB
模型评估及推理.py 4KB
模型配置.py 1KB
模型构建.py 6KB
数据集预处理.py 8KB
模型训练.py 3KB
共 6 条
- 1
资源评论
yava_free
- 粉丝: 3653
- 资源: 1458
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C语言-leetcode题解之83-remove-duplicates-from-sorted-list.c
- C语言-leetcode题解之79-word-search.c
- C语言-leetcode题解之78-subsets.c
- C语言-leetcode题解之75-sort-colors.c
- C语言-leetcode题解之74-search-a-2d-matrix.c
- C语言-leetcode题解之73-set-matrix-zeroes.c
- 树莓派物联网智能家居基础教程
- YOLOv5深度学习目标检测基础教程
- (源码)基于Arduino和Nextion的HMI人机界面系统.zip
- (源码)基于 JavaFX 和 MySQL 的影院管理系统.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功