resnet源码pytorch_pytorch conv1d

resnet源码pytorch_pytorch conv1d#Pytorch 0.4.0 ResNet34实现cifar10分类.#@Time:2018/6/17#@Author:xfLiimporttorchvisionastvimporttorchastimporttorchvision.transformsastransformsfromtorchimportnnfromtorch.utils.da…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用


# Pytorch 0.4.0 ResNet34实现cifar10分类.
# @Time: 2018/6/17
# @Author: xfLi

import torchvision as tv
import torch as t
import torchvision.transforms as transforms
from torch import nn
from torch.utils.data import DataLoader
import torch.nn.functional as F
t.set_num_threads(8)


class ResidualBloak(nn.Module):
    #残差块
    def __init__(self, inchannel, outchannel, stride=1, shortcut=None):
        super(ResidualBloak, self).__init__()
        self.left = nn.Sequential(
            nn.Conv2d(inchannel, outchannel, 3, stride, 1, bias=False),
            nn.BatchNorm2d(outchannel),
            nn.ReLU(inplace=True),
            nn.Conv2d(outchannel, outchannel, 3, 1, 1, bias=False),
            nn.BatchNorm2d(outchannel))
        self.right = shortcut

    def forward(self, x):
        out = self.left(x)
        residual = x if self.right is None else self.right(x)
        out += residual
        return F.relu(out)

class ResNet34(nn.Module):
    #  实现主module:ResNet34  
    #  ResNet34 包含多个layer,每个layer又包含多个residual block  
    #  用子module来实现residual block,用_make_layer函数来实现layer 
    def __init__(self, num_classes):
        super(ResNet34, self).__init__()
        #前几层图像转换
        self.pre = nn.Sequential(
            nn.Conv2d(3, 16, 3, 1, 1, bias=False),
            nn.BatchNorm2d(16),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(3, 2, 1))

        # 重复的layer,分别有3,4,6,3个residual block
        self.layer1 = self._make_layer(16, 16, 3, stride=1)
        self.layer2 = self._make_layer(16, 32, 4, stride=1)
        self.layer3 = self._make_layer(32, 64, 6, stride=1)
        self.layer4 = self._make_layer(64, 64, 3, stride=1)
        #分类用的全连接
        self.fc = nn.Linear(256, num_classes)

    def _make_layer(self, inchannel, outchannel, block_num, stride=1):
        #构建layer,包含多个residual block
        shortcut = nn.Sequential(
            nn.Conv2d(inchannel, outchannel, 1, stride, bias=False),
            nn.BatchNorm2d(outchannel))
        layer = []
        layer.append(ResidualBloak(inchannel, outchannel, stride, shortcut))
        for i in range(1, block_num):
            layer.append(ResidualBloak(outchannel, outchannel))
        return nn.Sequential(*layer)

    def forward(self, x):
        x = self.pre(x)
        x = self.layer1(x)
        x = self.layer2(x)
        x = self.layer3(x)
        x = self.layer4(x)
        x = F.avg_pool2d(x, 7)
        x = x.view(x.size(0), -1)
        return self.fc(x)

def getData(): # 定义对数据的预处理  
    transform = transforms.Compose([
        transforms.Resize(40),
        transforms.RandomHorizontalFlip(),
        transforms.RandomCrop(32),
        transforms.ToTensor()])
    #训练集
    trainset = tv.datasets.CIFAR10(root='/data/', train=True, transform=transform, download=True)
    trainset_loader = DataLoader(trainset, batch_size=4, shuffle=True)
    #测试集
    testset = tv.datasets.CIFAR10(root='/data/', train=False, transform=transform, download=True)
    testset_loader = DataLoader(testset, batch_size=4, shuffle=False)
    classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')
    return trainset_loader, testset_loader, classes

def train(): #训练
    trainset_loader, testset_loader, _ = getData() #获取数据
    net = ResNet34(10)
    print(net)
    criterion = nn.CrossEntropyLoss()
    optimizer = t.optim.SGD(net.parameters(), lr=0.001, momentum=0.9) #优化器

    for epoch in range(1):
        for step, (inputs,labels) in enumerate(trainset_loader):
            optimizer.zero_grad() #梯度清零
            output = net(inputs)
            loss = criterion(output, labels)
            loss.backward()
            optimizer.step()
            if step % 10 ==9:
                acc = test(net, testset_loader)
                print('Epoch', epoch, '|step ', step, 'loss: %.4f' %loss.item(), 'test accuracy:%.4f' %acc)
    print('Finished Training')
    return net

def test(net, testdata): #测试集
    correct, total = .0, .0
    for inputs, label in testdata:
        net.eval()
        output = net(inputs)
        _, predicted = t.max(output, 1) #分类结果
        total += label.size(0)
        correct += (predicted == label).sum()
    return float(correct) / total

if __name__ == '__main__':
    net = train()








版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/185357.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月6日 下午12:16
下一篇 2022年10月6日 下午12:16


相关推荐

  • js promise的用法

    js promise的用法nbsp 在理解 promise 的使用之前 首先要理解 js 语言的运行环境是单线程的 也就是说一次只能完成一个任务 也就是一条流水线 如果有多个任务就必须排队 前面一个任务完成 再执行后面一个任务 以此类推 这与 java 的多线程环境截然不同 所以要加以区分 1 对于 js 同步和异步 在这里需要加以备注一下 我们可以简单的理解为 可以改变程序执行顺序的操作就可以看成为异步操作 其实异步和同步的差别很简单 就在于这

    2026年3月19日
    3
  • pycharm无法使用第三方库_pycharm第三方库安装路径

    pycharm无法使用第三方库_pycharm第三方库安装路径有时候更新第三方库一直失败,猜测是源的问题,换成豆瓣的源后依然更新不了,参照网上搜索最后解决了问题,这里留个解决方法。方式一:pycharm里换源。自带是国外的源,更换为国内的访问更快更稳定,提供几个能用的源:清华:https://pypi.tuna.tsinghua.edu.cn/simple豆瓣:https://pypi.douban.com/simple/阿里:https://mirrors.aliyun.com/pypi/simple/我用的阿里。步骤:File>Settin

    2022年8月29日
    8
  • pycharm设置语言_pycharm设置语言

    pycharm设置语言_pycharm设置语言不要为看不懂设置而烦恼了,这篇文章教你如何更改PyCharm的语言。

    2022年8月29日
    6
  • vfs_fsync[通俗易懂]

    vfs_fsync[通俗易懂]在Linux系统中,对文件系统上文件的读写一般是通过页缓存(pagecache)进行的(DirectIO除外),这样设计的可以延时磁盘IO的操作,从而可以减少磁盘读写的次数,提升IO性能。但是性能和可靠性在一定程度上往往是矛盾的,虽然内核中设计有一个工作队列执行赃页回写同磁盘文件进行同步,但是在一些极端的情况下还是免不了掉电数据丢失。因此内核提供了sync、fsync、fdatasync和msync系统调用用于同步,其中sync会同步整个系统下的所有文件系统以及块设备,而fsync和fdatasync只针

    2022年5月7日
    81
  • SQL注入原理解说,非常不错!

    SQL注入原理解说,非常不错!

    2021年12月16日
    45
  • AI图像处理算法岗位整理[通俗易懂]

    AI图像处理算法岗位整理[通俗易懂]职位详情工作职责:负责开发Webex音视频媒体引擎,在windows,mac,ios,android,linux等平台上开发多媒体编解码,图像处理等算法。负责算法的逻辑,性能调优,汇编优化,或者GPU算法实现。对算法的设计,实现,调试,优化,测试以及metrics统计负责。职位要求:精通C/C++,在至少某一个开发平台上有5年以上产品开发经验对性能优化有丰富经验,理解如何设计高性能算法或者调试性能问题精通多线程编程,能利用多线程优化算法。熟悉arm或者x86汇编指令,intrinsic指

    2022年5月16日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号