ResNet50需要改进版的版本

网络备份版本,怕自己忘了

## A。这个是基础的resnet50模型样本,后期需要改进
##### 需要改进的点有
1. ~~增加时间记录time(找一下其他的notebooks~~
2. 访问自己的数据集(使用ImageFolder)
3. 封装train和test函数(自己测试另一个版本)
4. 使用冻结训练层,提高准确度
5. 用不同的优化器和损失函数
- 使用可以让结果可视化的tensorboard或Xpytorch(极客里面和抖音工地防护检测)
7. 使用不同的分类结果,比如说换成二分类
8. ~~怎么查看cifra-10数据集~~

import time

start_time = time.time()

# 运行你的代码

# 加载CIFAR10数据集
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
                                        download=True, transform=None)

# 显示第三张图片
image, label = trainset[2]
plt.imshow(image)
plt.show()


end_time = time.time()

print("程序运行时间:", end_time - start_time, "秒")
import torch
import torchvision
import torchvision.transforms as transforms
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import matplotlib.pyplot as plt
from ResNet import Bottleneck, ResNet, ResNet50
#train和test的数据转换内容的不同的
# 训练集
transform_train = transforms.Compose([
    transforms.RandomHorizontalFlip(),
    transforms.RandomCrop(32, padding=4),
    transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),
])
# 测试集
transform_test = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),
])
classes = ['plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
net = ResNet50(10).to('cuda')#引入模型

# 定义损失函数和优化器,使用torch.nn中的CrossEntropyLoss类和torch.optim中的SGD类,并指定学习率等参数
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.1, momentum=0.9, weight_decay=0.0001)
scheduler = optim.lr_scheduler.ReduceLROnPlateau(optimizer, factor = 0.1, patience=5)
EPOCHS = 200
for epoch in range(EPOCHS):
    losses = []
    running_loss = 0
    for i, inp in enumerate(trainloader):
        inputs, labels = inp #将数据分成x,y
        inputs, labels = inputs.to('cuda'), labels.to('cuda')#将数据放入GPU里面
        optimizer.zero_grad()#模型梯度清零
    
        outputs = net(inputs)#记录模型输出结果
        loss = criterion(outputs, labels)#记录损失函数值
        losses.append(loss.item())# 累加损失值

        loss.backward()
        optimizer.step()
        
        running_loss += loss.item()
        
        if i%100 == 0 and i > 0:
            print(f'Loss [{epoch+1}, {i}](epoch, minibatch): ', running_loss / 100)
            running_loss = 0.0

    avg_loss = sum(losses)/len(losses)
    scheduler.step(avg_loss)
            
print('Training Done')
correct = 0
total = 0

with torch.no_grad():
    for data in testloader:
        images, labels = data
        images, labels = images.to('cuda'), labels.to('cuda')
        outputs = net(images)
        
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()
print('Accuracy on 10,000 test images: ', 100*(correct/total), '%')

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值