"""
修改过混淆矩阵后
"""
import imageio.v2 as imageio
from torch.nn import init
from torch.optim.lr_scheduler import CosineAnnealingLR
import datetime
import itertools
import os
import random
# import cv2
import matplotlib.pyplot as plt
import numpy as np
# PaddyDataSet
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision.transforms as transforms
from torchvision import models
from PIL import Image
from sklearn.metrics import roc_curve, auc
from sklearn.model_selection import KFold
from torch.utils.data import DataLoader
from torch.utils.data import Dataset
from torchvision.datasets import ImageFolder
# from pytorchtools import EarlyStopping
from tqdm import tqdm
import GhostNet
import efficientnet
import GhostNet_res
import Covnet
import Covnet_2
import Covnet_3
import ResNet
# negative = 'cat'
# positive = 'dog'
# negative = 'negative'
# positive = 'positive'
# 工作目录
work_path = r"D:\学习\大创\data\训练数据集\model"
# 数据集文件夹位置
filepath = r"D:\学习\大创\data\训练数据集\data\Track1+CoughVid 谱图合集\Track1+CoughVid logMel 男女加阴阳"
# paddy_labels = {negative: 0,
# positive: 1}
paddy_labels = {"nf": 0,
"nm": 1,
"pf": 2,
"pm": 3}
# 用于存放测试集的数据和标签
test_data_info = []
# 用于包装train和val数据的dataset迭代器,里面剔除了test数据
class PaddyDataSet_train_val(Dataset):
def __init__(self, data_dir, transform=None, test_num=0.1):
"""
数据集
"""
self.label_name = paddy_labels
# data_info 存储所有图片路径和标签, 在DataLoader中通过index读取样本
self.data_info = self.get_img_info(data_dir)
self.transform = transform
self.temp = np.zeros((224, 224))
def __getitem__(self, index):
path_img, label = self.data_info[index]
img = Image.open(path_img).convert('RGB')
# print(img.size)
if img.size == self.temp.shape:
img = img.resize((224, 224))
# print(img.size)
if self.transform is not None:
img = self.transform(img)
return img, label
def __len__(self):
return len(self.data_info)
@staticmethod
def get_img_info(data_dir):
data_info = list()
for root, dirs, _ in os.walk(data_dir):
# 遍历类别
for sub_dir in dirs:
img_names = os.listdir(os.path.join(root, sub_dir))
img_names = list(filter(lambda x: x.endswith('.jpg'), img_names))
# 遍历图片
for i in range(len(img_names)):
img_name = img_names[i]
path_img = os.path.join(root, sub_dir, img_name)
# print(sub_dir)
label = paddy_labels[sub_dir]
data_info.append((path_img, int(label)))
# data_info 里面包含了全部的数据以及对应的图片,从中选取 test_num 百分数的数据作为验证集
data_num = len(data_info) # 看一下数据集的长度 data_num
data_num = int(test_num * data_num)
for i in range(data_num):
selected_element = random.choice(data_info)
test_data_info.append(selected_element)
data_info.remove(selected_element)
return data_info
# 用于包装test数据的dataset迭代器
class PaddyDataSet_test(Dataset):
def __init__(self, transform=None, test_data_info=test_data_info):
"""
数据集
"""
# data_info 存储所有图片路径和标签, 在DataLoader中通过index读取样本
self.test_info = test_data_info
self.transform = transform
self.temp = np.zeros((224, 224))
def __getitem__(self, index):
path_img, label = self.test_info[index]
img = Image.open(path_img).convert('RGB')
# print(img.size)
if img.size == self.temp.shape:
img = img.resize((224, 224))
# print(img.size)
if self.transform is not None:
img = self.transform(img)
return img, label
def __len__(self):
return len(self.test_info)
def init_weights(layer):
"""
参数初始化设置使用
:param layer:
:return:
"""
# 如果为卷积层,使用 He initialization 方法正态分布生成值,生成随机数填充张量
if type(layer) == nn.Conv2d:
# nn.init.normal_(layer.weight, mean=0, std=1)
nn.init.kaiming_normal_(layer.weight, a=0, mode='fan_in', nonlinearity='relu')
# 如果为全连接层,权重使用均匀分布初始化,偏置初始化为0.1
elif type(layer) == nn.Linear:
nn.init.uniform_(layer.weight, a=-0.1, b=0.1)
nn.init.constant_(layer.bias, 0.1)
class Focal_Loss(torch.nn.Module):
"""
二分类Focal Loss
"""
def __init__(self, alpha=0.25, gamma=1):
super(Focal_Loss, self).__init__()
self.alpha = alpha
self.gamma = gamma
def forward(self, preds, labels):
"""
preds:sigmoid的输出结果
labels:标签
"""
eps = 1e-7
loss = []
for i in range(len(labels)):
loss_1 = -1 * (1 - self.alpha) * torch.pow((1 - preds[i][1]), self.gamma) * torch.log(preds[i][1] + eps) * \
labels[i]
loss_0 = -1 * self.alpha * torch.pow(preds[i][1], self.gamma) * torch.log(1 - preds[i][1] + eps) * (
1 - labels[i])
loss.append(loss_0 + loss_1)
long = len(loss)
loss = sum(loss)
loss = torch.as_tensor(loss / long)
# return torch.mean(loss)
return loss
def getStat(all_data):
'''
用于计算自己(图片)数据集的均值与方差
:param train_data: 自定义类Dataset(或ImageFolder即可)
:return: (mean, std)
'''
train_loader = torch.utils.data.DataLoader(
all_data, batch_size=1, shuffle=False, num_workers=0,
pin_memory=True)
mean = torch.zeros(3)
std = torch.zeros(3)
print(type(train_loader))
print(len(all_data))
all_num = len(all_data)
num = 0
for X, _ in train_loader:
num += 1
print("共{}个,第{}个".format(all_num, num))
for d in range(3):
mean[d] += X[:, d, :, :].mean()
std[d] += X[:, d, :, :].std()
mean.div_(len(all_data))
std.div_(len(all_data))
return list(mean.numpy()), list(std.numpy())
# -------------------------------------------------- #
# (0)参数设置
# -------------------------------------------------- #
batch_size = 8 # 每个step训练batch_size张图片
epochs = 128 # 共训练epochs次
k = 5 # k折交叉验证
dropout_num_1 = 0.7
dropout_num_2 = 0.7
resnet_dropout = 0.4
learning_rate = 1e-4
pre_score_k = []
labels_k = []
# wd:正则化惩罚的参数
wd = 0.6
print("wd:{}".format(wd))
# wd = None
# stop_epoch: 早停的批量数
stop_epoch = 4
# -------------------------------------------------- #
# (1)文件配置
# -------------------------------------------------- #
# 计算图片的总数量
all_photo_num = 0
for root, dir_list, files in os.walk(filepath):
for dir in dir_list:
all_photo_num += len(os.listdir(os.path.join(root, dir)))
print(all_photo_num)
# test_num: 验证集占总数据的比例
test_num = 0.1
test_file_num = (int(test_num * all_photo_num) // batch_size) * batch_size
print(test_file_num)
# 需要用到train_num 初始化一下混淆矩阵
train_num = all_photo_num * (1 - test_num) * 0.8
# 显示一下文件夹的名称
dir_path = os.path.basename(filepath)
print(dir_path)
# 创建权重的文件夹
savepath = os.path.join(work_path, 'pth', dir_path)
cd = os.path.exists(savepath)
if cd:
print("权重保存文件夹已存在")
else:
print("创建权重保存文件夹")
os.mkdir(savepath)
# 判断保存图�
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
基于云边深度学习融合的COVID-19智能检测系统.zip (61个子文件)
Intelligent-COVID-19-identification-system-Model--main
特征图提取
linner_layer_umap.py 4KB
Fusion_Model
fusion_model_resnet_tcnn_1.py 31KB
fusion_model_1.py 11KB
猫狗识别
cat_dog_test_1.py 30KB
ResNet.py 10KB
model_val_2.py 10KB
__pycache__
ResNet.cpython-39.pyc 5KB
torch训练示例
torch_example_3.py 10KB
torch_example_1.py 7KB
torch_example_4.py 0B
torch_example_2.py 10KB
model_and_net
efficientnet.py 14KB
learn_model_1.ipynb 2KB
Covnet.py 3KB
operate_data.py 5KB
TCNN2.py 3KB
torch_model_test_7.py 21KB
torch_model_test_13.py 31KB
Covnet_2.py 4KB
pth_test.py 328B
eca_ResNet.py 7KB
torch_model_test_12.py 33KB
torch_model_test_4.py 20KB
resnet50.py 4KB
Covnet_3.py 4KB
confusion_matrix_demo.py 3KB
GhostNet.py 8KB
torch_model_test_14.py 28KB
ResNet.py 11KB
torch_model_test_15.py 27KB
model_val_1.py 8KB
torch_model_test_9.py 25KB
model_val_2.py 10KB
torch_model_test_3.py 19KB
model_fuwuqi.py 13KB
torch_model_test_2.py 13KB
TCNN.py 2KB
modeltools.py 25KB
torch_model_test_10.py 26KB
torch_model_test_6.py 23KB
Parallel_network.py 9KB
GhostNet_res.py 8KB
eca_module.py 891B
torch_model_test_16.py 26KB
torch_model_test_8.py 24KB
ResNet_attention.py 12KB
torch_model_test_11.py 26KB
random_extract.py 1KB
torch_model_test_5.py 20KB
torch_model_test_1.py 15KB
SWMM
test2.py 1KB
mopso-master
init.py 1KB
archive.py 5KB
fitness_funs.py 2KB
plot.py 3KB
main.py 7KB
pareto.py 2KB
Mopso.py 3KB
update.py 3KB
swmm_read_write_1.py 1KB
test.py 288B
共 61 条
- 1
资源评论
博士僧小星
- 粉丝: 1935
- 资源: 5894
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功