PyTorch深度学习(12)利用GPU训练及模型验证

一、利用GPU训练

方式一  .cuda()

网络模型

数据(输入,标注)

损失函数

调用  .cuda()  

方式二  .to(device)

.to(device) 

device = torch.device( "cpu" )

torch.device( "cuda" )

电脑中有多张显卡

torch.device( "cuda:0" )

torch.device( "cuda:1" )

只有数据、图片、标注需要.to() 后进行赋值

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

如果cuda.is_available() 可用,则使用cuda,否则使用cpu

具体代码

# 网络数据   数据(输入、标注)  损失函数   .cuda()
import torch
from torch import nn
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
import time

# 准备数据集
train_data = torchvision.datasets.CIFAR10(root="./dataset", train=True,
                                          transform=torchvision.transforms.ToTensor(), download=True)
test_data = torchvision.datasets.CIFAR10(root="./dataset", train=False,
                                         transform=torchvision.transforms.ToTensor(), download=True)

# 使用指定设备运行
# device = torch.device("cpu")
# device = torch.device("cuda:0")
# device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# length长度
train_data_size = len(train_data)
test_data_size = len(test_data)
print("训练集数据长度:{}".format(train_data_size))
print("测试集数据长度:{}".format(test_data_size))

# 利用DataLoader加载数据集
train_dataLoader = DataLoader(train_data, batch_size=64)
test_dataLoader = DataLoader(test_data, batch_size=64)

# 创建神经网络模型
class TestNN(nn.Module):
    def __init__(self):
        super(TestNN, self).__init__()
        self.model1 = nn.Sequential(
            nn.Conv2d(3, 32, 5, 1, padding=2),
            nn.MaxPool2d(2),
            nn.Conv2d(32, 32, 5, 1, padding=2),
            nn.MaxPool2d(2),
            nn.Conv2d(32, 64, 5, 1, padding=2),
            nn.MaxPool2d(2),
            nn.Flatten(),
            nn.Linear(64 * 4 * 4, 64),
            nn.Linear(64, 10)
        )

    def forward(self, x):
        x = self.model1(x)
        return x


tnn = TestNN()
# tnn.to(device)
if torch.cuda.is_available():
    tnn = tnn.cuda()

# 损失函数
loss_fn = nn.CrossEntropyLoss()
if torch.cuda.is_available():
    loss_fn = loss_fn.cuda()

# 优化器
learning_rate = 1e-2
optimizer = torch.optim.SGD(tnn.parameters(), lr=learning_rate)

# 设置训练网络的一些参数
# 记录训练的次数
total_train_step = 0
# 记录测试的次数
total_test_step = 0

# 添加tensorboard
writer = SummaryWriter("logs")

epoch = 10
start_time = time.time()
for i in range(epoch):
    print("---第{}轮训练开始---".format(i + 1))

    # 训练步骤开始
    tnn.train()
    for data in train_dataLoader:
        images, targets = data
        # images = images.to(device)
        # targets = targets.to(device)
        if torch.cuda.is_available():
            images = images.cuda()
            targets = targets.cuda()
        outputs = tnn(images)
        loss = loss_fn(outputs, targets)

        # 优化器优化模型
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        total_train_step = total_train_step + 1
        if total_train_step % 100 == 0:
            end_time = time.time()
            print(end_time - start_time)
            print("训练次数:{},Loss:{}".format(total_train_step, loss.item()))
            writer.add_scalar("train_loss", loss.item(), total_train_step)

    # 测试步骤开始
    tnn.eval()
    total_test_loss = 0
    total_accuracy = 0
    with torch.no_grad():
        for data in test_dataLoader:
            images, targets = data
            if torch.cuda.is_available():
                images = images.cuda()
                targets = targets.cuda()
            output = tnn(images)
            loss = loss_fn(output, targets)
            total_test_loss = total_test_loss + loss
            accuracy = (output.argmax(1) == targets).sum()
            total_accuracy = total_accuracy + accuracy

    print("整体测试集上的Loss:{}".format(total_test_loss))
    print("整体测试集上的正确率:{}".format(total_accuracy / test_data_size))
    writer.add_scalar("test_loss", total_test_loss, total_test_step)
    writer.add_scalar("test_accuracy", total_accuracy / test_data_size, total_test_step)
    total_test_step = total_test_step + 1

    torch.save(tnn, "tnn_{}.pth".format(i))
    print("模型已保存")

writer.close()

二、模型验证

模型验证方法

完整的模型验证(测试、demo),利用已经训练好的模型,给其提供输入

torch.load("加载训练好的数据集", map_location="cpu")  当输入类型为cpu报错时使用

使用中注意图片的大小是否符合训练集和测试集的要求

model.eval()  

with torch.no_grad():

       output = model(image)

对指定图片测试,判断图片的类别

注意:如果图片是png格式,因为png是4通道,要转换image=convert('RGB')

具体代码

import torchvision
from PIL import Image
from test_model import *

image = Image.open("image/plane.jpg")
print(image)

transform = torchvision.transforms.Compose([
    torchvision.transforms.ToTensor(),
    torchvision.transforms.Resize((32, 32))
])

# 如果是png格式,因为Png是4通道,要转换image = image.convert('RGB')

image = transform(image)
print(image.shape)

model = torch.load("tnn_29.pth", map_location="cpu")
print(model)
image = torch.reshape(image, (1, 3, 32, 32))

model.eval()
with torch.no_grad():
    output = model(image)
print(output)

print(output.argmax(1))

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源简介】 基于深度学习的图像超分辨率重建及其在医学影像上的应用python源码+使用说明.zip 组成部分 - **前言** 介绍图像超分辨率问题、研究现状、前景,介绍在医学图像上进行超分辨率的重要性。 - **自然图像上的超分辨率研究** 在 DIV2K 数据集(800 train + 100 val)进行实验。选取 baseline 模型为 ESPCN、DWSR、EDSR。针对这些模型的不足之处,提出改进:使用小波 + U-Net + 感知损失多任务学习的 LU-MWCNN模型,达到超越 baseline 的效果。 - **医学图像上的超分辨率应用** 在 DeepLesion 数据集(CT 图像)的 Key_slices 上进行实验,同样与 baseline 模型进行对比。提出 CT-LPIPS,利用一个类 VGG 网络训练。 - **医学图像超分辨率平台开发** 以 CT 图像为例,搭建 Web 服务,借助 Cornerstone.js 库,医生可预览 DICOM,或将图像发送至后端重建服务,以获得超分辨完成的结果。后端采用 Flask + PyTorch 进行部署和实时推理。 - **总结** ## 目录结构 baselines / 基线模型 - 修改 `config/common.py`,选择数据集和输出路径。目前提供的数据集接口有 - div2k.DIV2KDataset - deeplesion.DeepLesionDataset - 训练 ```bash $ cd script $ chmod 755 * $ ./train_dwsr.sh div2k # ./train_<model>.sh <data> # 修改脚本可以指定 GPU 编号 ``` - 验证结果、权重、TensorBoard 日志会输出在 `output_<data>/<model>`下 experiment / 小型实验与绘图 - bicubic-learnable:揭示双三次插值劣于可学习过程上采样。 - calc-ct-lpips:CT-LPIPS的集中计算。 - curve-merge:曲线绘制与原始数据。 - deeplesion-sample:DeepLesion效果取样。 - div2k-sample:DIV2K效果取样。 - haar-wavelet:哈尔小波变换样例。 - param-count:参数量统计。 - ycbcr:YCbCr色彩空间示意。 nova / 改进与创新 - lu_mwcnn 小波 U-Net + 多任务学习,超越 baseline。 ```bash $ chmod 755 *.sh $ ./trian_div2k.sh # ./train_deeplesion.sh ``` - ct_lpips CT 图的感知损失(使用轻量化的类 VGG 网络)。 ```bash $ chmod 755 *.sh $ ./trian.sh ``` - ablation 消融实验相关。 ```bash $ chmod 755 *.sh $ ./train_div2k.sh $ ./test_manual.sh ``` paper / 文本材料 ``` 【说明】 1、项目源码在上传前,都经过本地成功运行,功能测试无误。请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、机械电子信息等相关专业背景的在校大学生、专业老师 行业从业人员等下载使用。 3、用途:项目代表性强,具有创新性和启发性,故具有挺高的学习借鉴价值。不仅适合小白入门进阶,还可作为毕设项目、课程设计、大作业、比赛初期项目立项演示等。 4、如果基础还不错,又热爱学习钻研,也可基于此项目基础上进行修改进行二次开发。 本人也是技术狂热者,如果觉得此项目对您有价值,欢迎下载使用! 无论您是运行还是二次开发,遇到问题或困惑,欢迎私信交流学习。
PyTorch是一个以Python语言为基础的开源深度学习框架,它被广泛应用于生物领域的深度学习研究和应用中。 在生物学研究中,深度学习可以被用于多样的任务,例如基因组学、蛋白质结构预测、药物发现和医学影像分析等。PyTorch作为一个强大且灵活的框架,为生物学家提供了一个方便使用的工具,以加速他们的研究。 PyTorch结合了一个动态计算图的特性,使得模型的构建和调整过程更加直观和灵活。这对于生物学家来说尤其重要,因为他们需要不断地尝试不同的模型结构和参数设置来解决复杂的生物学问题。PyTorch的动态图使得模型的修改变得容易,同时还提供了丰富的工具和函数库来支持模型训练和评估。 此外,PyTorch在处理大规模数据集时性能卓越。生物学研究中常常需要处理庞大的基因组数据或者医学影像数据,而PyTorch能够高效地利用GPU的并行计算能力来加速训练过程。这使得研究者能够更快地完成实验和分析,并加速了深度学习在生物学领域的应用。 PyTorch还提供了许多扩展库和预训练模型,可以帮助生物学家快速构建自己的深度学习模型。这些模型包括经典的卷积神经网络、循环神经网络和生成对抗网络等,适用于各种不同的生物学问题。通过使用这些模型,生物学家可以更快地验证自己的假设,加深对生物学过程的理解。 总之,PyTorch在生物学领域的深度学习研究和应用中起到了重要的作用。它提供了一个灵活和高效的框架,使得生物学家能够更好地利用深度学习技术来解决各种生物学问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值