#############################################################
############ 编写人:常泽钰
############ 时间 : 2022/9/23
############ 功能 :实现明星的图片分类
############ 数据格式:
'''
--dataset
--train
--0
--**.jpg
--.......
--1
--2
--3
--val
'''
#############################################################
from tqdm import tqdm
batch_size = 32 #设置批次大小
learning_rate = 0.001 #设置学习率
epoches = 8 #设置训练的次数
num_of_classes=12 #要分的类别个数
import torch
import os
from torch.utils import data
import torchvision.datasets as dsets
import torchvision.transforms as transforms
trainpath = './dataset/train/'
valpath = './dataset/val/'
#数据增强的方式
traintransform = transforms .Compose([
transforms .RandomRotation (20), #随机旋转角度
transforms .ColorJitter(brightness=0.1), #颜色亮度
transforms .Resize([224, 224]), #设置成224×224大小的张量
transforms .ToTensor(), # 将图⽚数据变为tensor格式
# transforms.Normalize(mean=[0.485, 0.456, 0.406],
# std=[0.229, 0.224, 0.225]),
])
valtransform = transforms .Compose([
transforms .Resize([224, 224]),
transforms .ToTensor(), # 将图⽚数据变为tensor格式
])
trainData = dsets.ImageFolder (trainpath, transform =traintransform ) # 读取训练集,标签就是train⽬录下的⽂件夹的名字,图像保存在格⼦标签下的⽂件夹⾥
valData = dsets.ImageFolder (valpath, transform =valtransform ) #读取演正剧
trainLoader = torch.utils.data.DataLoader(dataset=trainData, batch_size=batch_size, shuffle=True) #将数据集分批次 并打乱顺序
valLoader = torch.utils.data.DataLoader(dataset=valData, batch_size=batch_size, shuffle=False) #将测试集分批次并打乱顺序
# test_sum = sum([len(x) for _, _, x in os.walk(os.path.dirname(trainpath))]) #计算 训练集和测试集的图片总数
# train_sum = sum([len(x) for _, _, x in os.walk(os.path.dirname(valpath))])
train_sum=len(trainData)
test_sum=len(valData)
import numpy as np
import torchvision.models as models
# model = models.resnet34(pretrained=True) #pretrained表⽰是否加载已经与训练好的参数
# model.fc = torch.nn.Linear(512, num_of_classes) #将最后的fc层的输出改为标签数量(如3),512取决于原始⽹络fc层的输⼊通道
model=torch.load("./resnet34_star.pt")
model = model.cuda() # 如果有GPU,⽽且确认使⽤则保留;如果没有GPU,请删除
#from MyLoss import Loss
#criterion=Loss("mean")
criterion = torch.nn.CrossEntropyLoss() # 定义损失函数
#optimizer = torch.optim.Adam(model.parameters (), lr=learning_rate )
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate) # 定义优化器
from torch.autograd import Variable
#定义训练的函数
def train(model, optimizer, criterion):
model.train()
total_loss = 0
train_corrects = 0
for i, (image, label) in enumerate (tqdm(trainLoader)):
image = Variable(image.cuda()) # 同理
label = Variable(label.cuda()) # 同理
#print(i,image,label)
optimizer.zero_grad ()
target = model(image)
loss = criterion(target, label)
loss.backward()
optimizer.step()
total_loss += loss.item()
max_value , max_index = torch.max(target, 1)
pred_label = max_index.cpu().numpy()
true_label = label.cpu().numpy()
train_corrects += np.sum(pred_label == true_label)
return total_loss / float(len(trainLoader)), train_corrects / train_sum
testLoader=valLoader
#定义测试的函数
def evaluate(model, criterion):
model.eval()
corrects = eval_loss = 0
with torch.no_grad():
for image, label in tqdm(testLoader):
image = Variable(image.cuda()) # 如果不使⽤GPU,删除.cuda()
label = Variable(label.cuda()) # 同理
pred = model(image)
print(pred.size())
print(label.size())
loss = criterion(pred, label)
eval_loss += loss.item()
max_value, max_index = torch.max(pred, 1)
pred_label = max_index.cpu().numpy()
true_label = label.cpu().numpy()
corrects += np.sum(pred_label == true_label)
return eval_loss / float(len(testLoader)), corrects, corrects / test_sum
#torch.save(model,"./resnet1.pt")
model.eval()
corrects = eval_loss = 0
from sklearn import metrics
pred_labels=np.array([])
true_labels=np.array([])
with torch.no_grad():
for image, label in tqdm(testLoader):
image = Variable(image.cuda()) # 如果不使⽤GPU,删除.cuda()
label = Variable(label.cuda()) # 同理
pred = model(image)
print(pred.size())
print(label.size())
loss = criterion(pred, label)
eval_loss += loss.item()
max_value, max_index = torch.max(pred, 1)
pred_label = max_index.cpu().numpy()
true_label = label.cpu().numpy()
corrects += np.sum(pred_label == true_label)
#return eval_loss / float(len(testLoader)), corrects, corrects / test_sum
pred_labels=np.append(pred_labels,pred_label)
true_labels = np.append(true_labels, true_label)
cm=metrics.confusion_matrix(pred_labels,true_labels,labels=[0,1,2,3,4])
print(cm)
import seaborn as sns
import matplotlib.pyplot as plt
sns.heatmap(cm,annot=True,fmt='.2e',cmap='GnBu')
plt.show()
#
# for i in range(epoches):
# print("第{}个epoch".format(i+1))
# #train_loss,train_acc=train(model,optimizer,criterion)
# #print("train_loss: {} train_acc: {}\n".format(train_loss,train_acc))
# test_loss,test_correct,test_acc=evaluate(model,criterion)
# print("test_loss: {} test_correct:{} test_acc:{}".format(test_loss,test_correct,test_acc))
# torch.save(model,"./resnet34_star.pt")#保存模型,第二个参数是保存的路径
TechMasterPlus
- 粉丝: 3336
- 资源: 24
最新资源
- MATLAB代码《基于元模型优化算法的主从博弈多电厂动态定价和能量管理》 软件环境:MATLAB+Cplex 内容:程序基于Kriging元模型的主从博弈均衡算法拟合并替代电厂能量内部管理模型,结合粒
- 永磁同步电机PMSM基于滑模控制的直接转矩控制 ,带载和突加负载如图所示
- 百度飞桨工程部署,一手教你快速部署百度飞桨C++工程落地,包含飞桨OCR文字检测识别、飞桨图片分类、飞桨图片检测,直接调用飞桨模型库,配合tensorRT模型加速库进行前向运算,可以直接按照我的cma
- 三相电压型逆变器控制simulink 说明:采用SPWM,使用电压单闭环控制的三相电压型逆变器仿真模型, 模型中对测量的电压使用了标幺值,(会有一定好处的),所以uq*的给定值
- MATLAB代码:基于多目标遗传算法的分布式电源选址定容研究 关键词:分布式电源 选址定容 多目标遗传算法 参考文档:《自写文档》基本复现; 仿真平台:MATLAB 主要内容:代码主要做的是基
- MATLAB代码:基于改进萤火虫算法的分布式电源选址定容-IEEE33节点 关键词:改进萤火虫算法 选址定容 分布式电源 仿真平台:MATLAB 主要内容:代码主要做的是基于改进萤火虫算法的分
- MATLAB simulink仿真 光伏蓄电池恒流恒压充电 系统启动运行在恒流充电模式 当电压超过界定值切到恒压充电模式
- 基于yalmip+cplex的微网优化调度 程序:Matlab-yalmip-cplex 调度优化 蓄电池 市场购电 功率平衡 目标函数:总费用最低 温馨提示用cplex跑不了不是程序的问题哦
- winfrom开发框架源码 一、源码特点 本系统实现的核心功能完全适合企业级开发,框架采用多层架构,反射技术 使用DevExpress UI套件 框架实现权限管理里模块:按钮管理、菜单
- 灰狼、鲸鱼、人工蜂群算法matlab 程序采用CEC21测试函数对灰狼算法、鲸鱼算法、人工蜂群算法的性能进行测试,可以得到相同测试环境(相同种群数量和迭代次数)的算法对比结果,附赠CEC21测试函数包
- Simulink 基于模糊PI的网侧逆变器控制策略研究 本人研究方向信号处理特征提取和故障诊断
- 全自动设备软件源码 轴卡常用运动功能函数调用教程 非常适合电气工程师,设备软件开发人员 支持回零运动,io控制,dxf c#图形数据处理,可显示cad图,运动中实时显示路径 可供c#学习和自动化设
- 基于fuzzy和smc的横摆稳定性
- 碳交易机制下考虑需求响应的综合能源系统优化运行 综合能源系统是实现“双碳”目标的有效途径,为进一步挖掘其需求侧可调节潜力对碳减排的作用,提出了一种碳交易机制下考虑需求响应的综合能源系统优化运行模型
- 标价为原价 储能容量优化 储能配置 微网 编程语言:matlab 主题:基于混合整数规划方法的微网电池储能容量优化配置 主要内容: 本代码目的为实现微电网内电池容量的优化配置,目标函数为配置过程中
- 基于峰谷分时电价引导下的电动汽车充电负荷优化 在研究电动汽车用户充电需求的前提下,利用蒙特卡洛方法对2种不同充电方式进行模拟并对其进行分析;分析用户响应度对电动汽车有序充电的影 响,建立峰谷分时电价对
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈