pytorch入门与实践:小试牛刀之CIFAR-10图像分类

PyTorch实现图像分类-cifar-10数据集案例实战 在本此案例中,我们将使用CIFAR10数据集。 它包括十种物体类别:‘飞机’,‘汽车’,‘鸟’,‘猫’,‘鹿’,‘狗’,‘青蛙’,‘马’,‘船’,‘卡车’。 CIFAR-10中的图像尺寸为3×32×32,即尺寸为32×32像素的3通道彩色图像。如下图所示: 训练图像分类器 具体步骤如下: 使用torchvision导入和标准化CIFAR10训练和测试数据集 定义卷积神经网络 定义损失函数 在训... 阅读详情



在深度学习中数据加载及预处理是非常复杂繁琐的,但PyTorch提供了一些可极大简化和加快数据处理流程的工具。同时,对于常用的数据集,PyTorch也提供了封装好的接口供用户快速调用,这些数据集主要保存在torchvison中。

torchvision实现了常用的图像数据加载功能,例如Imagenet、CIFAR10、MNIST等,以及常用的数据转换操作,这极大地方便了数据加载,并且代码具有可重用性。

小试牛刀:CIFAR-10图像分类

下面我们来尝试实现对CIFAR-10数据集的分类,步骤如下:

  1. 使用torchvision加载并预处理CIFAR-10数据集
  2. 定义网络
  3. 定义损失函数和优化器
  4. 训练网络并更新网络参数
  5. 测试网络

1、CIFAR-10数据加载及预处理

CIFAR-10^3是一个常用的彩色图片数据集,它有10个类别: 'airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck'。每张图片都是$3\times32\times32$,也即3-通道彩色图片,分辨率为$32\times32$。

import torch as t
import torchvision as tv
import torchvision.transforms as transforms
from torchvision.transforms import ToPILImage
show = ToPILImage() # 可以把Tensor转成Image,方便可视化
# 第一次运行程序torchvision会自动下载CIFAR-10数据集,
# 大约100M,需花费一定的时间,
# 如果已经下载有CIFAR-10,可通过root参数指定

# 定义对数据的预处理
transform = transforms.Compose([
        transforms.ToTensor(), # 转为Tensor
        transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)), # 归一化
                             ])

# 训练集
trainset = tv.datasets.CIFAR10(
                    root='../data/', 
                    train=True, 
                    download=True,
                    transform=transform)

trainloader = t.utils.data.DataLoader(
                    trainset, 
                    batch_size=4,
                    shuffle=True, 
                    num_workers=2)

# 测试集
testset = tv.datasets.CIFAR10(
                    '../data/',
                    train=False, 
                    download=True, 
                    transform=transform)

testloader = t.utils.data.DataLoader(
                    testset,
                    batch_size=4, 
                    shuffle=False,
                    num_workers=2)

classes = ('plane', 'car', 'bird', 'cat',
           'deer', 'dog', 'frog', 'horse', 'ship', 'truck')

'''
Using downloaded and verified file: ../data/cifar-10-python.tar.gz
Files already downloaded and verified
'''

print(len(trainset))
print(trainset[0][0].size())
print(trainset[0][1])
print(classes[trainset[0][1]])
'''
50000
torch.Size([3, 32, 32])
6
frog
'''

Dataset对象是一个数据集,可以按下标访问,返回形如(data, label)的数据。

(data, label) = trainset[100] # trainset里的样本是一个tuple
print(data.size()) # data是一个Tensor
print(label) # label是int
print(classes[label])

# (data + 1) / 2是为了还原被归一化的数据
show((data + 1) / 2).resize((100, 100))
'''
torch.Size([3, 32, 32])
8
ship
'''

Dataloader是一个可迭代的对象,它将dataset返回的每一条数据拼接成一个batch,并提供多线程加速优化和数据打乱等操作。当程序对dataset的所有数据遍历完一遍之后,相应的对Dataloader也完成了一次迭代。

dataiter = iter(trainloader)
images, labels = dataiter.next() # 返回4张图片及标签
print(' '.join('%11s'%classes[labels[j]] for j in range(4)))
show(tv.utils.make_grid((images+1)/2)).resize((400,100))
'''
frog         car         dog       truck
'''

2、定义网络

构建LeNet网络,修改self.conv1第一个参数为3通道,因CIFAR-10是3通道彩图。

import torch.nn as nn
import torch.nn.functional as F

class Net(nn.Module):
    def __init__(self):
        # nn.Module子类的函数必须在构造函数中执行父类的构造函数
        # 下式等价于nn.Module.__init__(self)
        super(Net, self).__init__()

        # 卷积层 '1'表示输入图片为单通道, '6'表示输出通道数,'5'表示卷积核为5*5
        self.conv1 = nn.Conv2d(3, 6, 5) 
        # 卷积层
        self.conv2 = nn.Conv2d(6, 16, 5) 
        # 仿射层/全连接层,y = Wx + b
        self.fc1   = nn.Linear(16*5*5, 120) 
        self.fc2   = nn.Linear(120, 84)
        self.fc3   = nn.Linear(84, 10)

    def forward(self, x): 
        # 卷积 -> 激活 -> 池化 
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
        x = F.max_pool2d(F.relu(self.conv2(x)), 2) 
        # reshape,‘-1’表示自适应
        x = x.view(x.size()[0], -1) 
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)        
        return x

net = Net()
print(net)
'''
Net(
  (conv1): Conv2d(3, 6, kernel_size=(5, 5), stride=(1, 1))
  (conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))
  (fc1): Linear(in_features=400, out_features=120, bias=True)
  (fc2): Linear(in_features=120, out_features=84, bias=True)
  (fc3): Linear(in_features=84, out_features=10, bias=True)
)
'''

3、定义损失函数和优化器(loss和optimizer)

from torch import optim
criterion = nn.CrossEntropyLoss() # 交叉熵损失函数
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

4、训练网络

所有网络的训练流程都是类似的,不断地执行如下流程:

  • 输入数据
  • 前向传播+反向传播
  • 更新参数
t.set_num_threads(8)
for epoch in range(2):  

    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):

        # 输入数据
        inputs, labels = data

        # 梯度清零
        optimizer.zero_grad()

        # forward + backward 
        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()   

        # 更新参数 
        optimizer.step()

        # 打印log信息
        # loss 是一个scalar,需要使用loss.item()来获取数值,不能使用loss[0]
        running_loss += loss.item()
        if i % 2000 == 1999: # 每2000个batch打印一下训练状态
            print('[%d, %5d] loss: %.3f' \
                  % (epoch+1, i+1, running_loss / 2000))
            running_loss = 0.0
print('Finished Training')
'''
[1,  2000] loss: 2.267
[1,  4000] loss: 1.905
[1,  6000] loss: 1.682
[1,  8000] loss: 1.549
[1, 10000] loss: 1.528
[1, 12000] loss: 1.465
[2,  2000] loss: 1.400
[2,  4000] loss: 1.367
[2,  6000] loss: 1.356
[2,  8000] loss: 1.327
[2, 10000] loss: 1.297
[2, 12000] loss: 1.274
Finished Training
'''

此处仅训练了2个epoch(遍历完一遍数据集称为一个epoch),来看看网络有没有效果。将测试图片输入到网络中,计算它的label,然后与实际的label进行比较。

dataiter = iter(testloader)
images, labels = dataiter.next() # 一个batch返回4张图片
print('实际的label: ', ' '.join(\
            '%08s'%classes[labels[j]] for j in range(4)))
show(tv.utils.make_grid(images / 2 - 0.5)).resize((400,100))

'''
实际的label:       cat     ship     ship    plane
'''

接着计算网络预测的label:

# 计算图片在每个类别上的分数
outputs = net(images)
# 得分最高的那个类
_, predicted = t.max(outputs.data, 1)

print('预测结果: ', ' '.join('%5s'\
            % classes[predicted[j]] for j in range(4)))
'''
预测结果:    cat   car   car  ship
'''

已经可以看出效果,准确率50%,但这只是一部分的图片,再来看看在整个测试集上的效果。

correct = 0 # 预测正确的图片数
total = 0 # 总共的图片数


# 由于测试的时候不需要求导,可以暂时关闭autograd,提高速度,节约内存
with t.no_grad():
    for data in testloader:
        images, labels = data
        outputs = net(images)
        _, predicted = t.max(outputs, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum()

print('10000张测试集中的准确率为: %d %%' % (100 * correct / total))
'''
10000张测试集中的准确率为: 52 %
'''

训练的准确率远比随机猜测(准确率10%)好,证明网络确实学到了东西。

5、在GPU训练

就像之前把Tensor从CPU转到GPU一样,模型也可以类似地从CPU转到GPU。

device = t.device("cuda:0" if t.cuda.is_available() else "cpu")

net.to(device)
images = images.to(device)
labels = labels.to(device)
output = net(images)
loss= criterion(output,labels)

loss
'''
tensor(2.3099, device='cuda:0', grad_fn=<NllLossBackward>)
'''

如果发现在GPU上并没有比CPU提速很多,实际上是因为网络比较小,GPU没有完全发挥自己的真正实力。

对PyTorch的基础介绍至此结束。总结一下,本节主要包含以下内容。

  1. Tensor: 类似Numpy数组的数据结构,与Numpy接口类似,可方便地互相转换。
  2. autograd/: 为tensor提供自动求导功能。
  3. nn: 专门为神经网络设计的接口,提供了很多有用的功能(神经网络层,损失函数,优化器等)。
  4. 神经网络训练: 以CIFAR-10分类为例演示了神经网络的训练流程,包括数据加载、网络搭建、训练及测试。

通过本节的学习,相信读者可以体会出PyTorch具有接口简单、使用灵活等特点。从下一章开始,本书将深入系统地讲解PyTorch的各部分知识。

深度学习之QLoRA原理详解及Pytorch实现 【代码】深度学习之QLoRA原理详解及Pytorch实现。 阅读详情

相关推荐

PyTorch、CPU、GPU 与 CUDA 深度解析:一次张量加法背后的四层世界

本文厘清PyTorch、CPU、GPU与CUDA的层级关系:PyTorch是编程接口,CPU负责控制与调度,CUDA是让CPU指挥GPU的并行编程平台,GPU则是实际执行计算的加速器。四者非并列,而是分层协作。以x + y为例,从Python前端到算子分发、CUDA运行时,最终在GPU硬件上执行。关键认知包括:GPU并非万能加速器,小任务因开销大反而更慢;.to('cuda')仅搬运数据,不改变代码逻辑;算子性能受算术强度与内存带宽制约。理解此链路是优化深度学习性能的前提。

reset2021的博客 263

Pytorch 学习 (三) 案例CIFAR10 图片分类

数据库介绍 在本次案例中 使用 CIFAR10 数据集。它具有以下类别:“飞机”,“汽车”,“鸟”,“猫”,“鹿”,“狗”,“青蛙”,“马”,“船”,“卡车”。CIFAR-10中的图像尺寸为3x32x32,即尺寸为32x32像素的3通道彩色图像。 基本顺序: 使用以下torchvision加载和标准化CIFAR10训练和测试数据集 定义卷积神经网络 定义损失函数 根据训练数据训练网络 在测试数据上测试网络 使用以下torchvision加载和标准化CIFAR10训练和测试数据...

dadada 白的博客 875

PyTorch深度学习实战(3)—— 小试牛刀:CIFAR-10分类

CIFAR-10是一个常用的彩色图片数据集,它有10个类别:airplane、automobile、bird、cat、deer、dog、frog、horse、ship和truck。神经网络训练:以CIFAR-10分类为例,演示了神经网络的训练流程,包括数据加载、网络搭建、模型训练及模型测试。Tensor:类似NumPy数组的数据结构,它的接口与NumPy的接口类似,可以方便地互相转换。拷贝上面的LeNet网络,因为CIFAR-10数据集中的数据是3通道的彩色图像,所以将。

shangjg3的博客 1073

PyTorch实战:从零开始构建CIFAR-10图像分类模型 (附详细代码与图解)

大家好!今天,我们将一起踏上一段激动人心的深度学习之旅:使用强大的PyTorch框架,从零开始构建一个卷积神经网络(CNN),来解决经典的CIFAR-10图像分类问题。 无论你是深度学习的新手,还是希望巩固PyTorch基础知识的开发者,本文都将为你提供一个清晰、详尽的实战指南。

一位热衷于机器学习的博主,致力于将复杂的AI算法化繁为简。分享代码实战与前沿洞见,与你一同探索人工智能的奇妙世界。 1347

【第3章:卷积神经网络(CNN)——3.5 CIFAR-10图像分类】

好了,说了这么多,咱们也来总结一下吧!CNN作为一种深度学习的重要模型,在图像分类、图像识别等领域展现出了卓越的性能。通过多层卷积层和池化层的堆叠,CNN能够逐渐学习到更高级、更复杂的特征表示。而CIFAR-10作为一个常用的图像分类数据集,为咱们提供了一个检验算法和模型性能的绝佳平台。当然啦,CNN和CIFAR-10的故事还远远没有结束。随着深度学习技术的不断发展,咱们相信CNN会在未来继续发挥着重要作用,并推动着人工智能技术的不断前进。好啦,今天的分享就到这里啦!

商务合作|问题讨论|交流学习 请联系作者微信,加微信请务必注明来意,博客主页有联系方式 293

CCS8.1 导入CCS3.3工程方法

    CCS3.3作为开发人员使用最广开发工具,研究人员手上存在不少该版本的建立的程序版本,然而随着TI公司推出高级版本的CCS平台,在新的平台上集成了更加丰富的功能和优点。利用新版本的平台在开发和编译旧版本工程上可以节省大量时间和精力。在使用新版本开发3.3版本工程时,首要解决的就是加载3.3的工程文件,现将加载过程记录如下: 第一步:Project-&gt;Import Legacy CC...

1万+

【Pytorch框架实战】之CIFAR-10图像分类

【Pytorch框架实战】之CIFAR-10图像分类 1.main.py import torch from torchvision import datasets import torch.nn as nn from torch.utils.data import DataLoader import torchvision.transforms as transforms import torc...

qq_39071739的博客 680

Abaqus复合材料层合板仿真

由于复合材料的损伤失效问题过于复杂,解析方法受到数学工具的限制难以实现,而实验也需要高昂的费用和时间成本难以广泛应用,Abaqus针对复合材料提供了专业的建模工具和损伤分析理论来模拟复合材料层合板在各种工况下的失效行为。

JXHXHL的博客 2541

pytorch实战(一)简单卷积网络CIFAR10图片分类

之前已经学习了: 如何利用pytorch设计简单的神经网络 如何制作数据集 何如使用设计的网络进行训练 接下来利用一个简单的 1.CIFAR10数据集介绍 官方网站:http://www.cs.toronto.edu/~kriz/cifar.html 10个类别,每个类别6000张,一共60000张图片,50000张用来训练,10000张用来测试 这里可以查看各种方法在该数据集...

weixin_41680653的博客 2759

新手小白 必须精进的 “ FLASH分区管理Code and Data ” !!!最强文章解析!!!

FLASH“代码区”和“数据区”不是每个项目都必须显式管理,但只要你的产品功能越来越丰富,对可靠性和扩展性要求提高,就一定要学会科学划分和使用。这也是嵌入式工程师进阶路上的必修课!

qq_75157958的博客 933

Windows10下部署Heygem进行数字人生成

对于使用Heygem生成数字人,需要注意几个问题: + 需要使用Nvidia的显卡。 + 需要在Windows上进行本地部署。主要原因为客户端是Windows的,客户端对上传的视频写入硬编码的`D:\heygem_data\voice\data`目录,需要在容器上读取这些文件。 + 需要在Windows上部署Docker,将Windows的目录映射到容器中,由容器中的服务进行读取。 + 需要特别注意,一定要有D盘,这个D盘是Windows的D盘,不能是插入的USB设备后产生的D盘。 + 需要下载3个Doc

冀辉的博客 5619

《深度学习框架:PyTorch入门与实践》学习笔记(二)

之前一个笔记中学习了PyTorch中的一些重要概念,如Tensor等,以及和神经网络的构建,接下来我们可以用所学到的知识来进行一个简单的实战。 上一个笔记链接:https://blog.youkuaiyun.com/whatiscode/article/details/106473811 小试牛刀:CIFAR-10分类 下面我们来尝试实现对CIFAR-10数据集的分类,步骤如下: 使用torchvision加载并预处理CIFAR-10数据集 定义网络 定义损失函数和优化器 训练网络并更新网络参数 测试网络 1 .

奉现的博客 736

DeepMD-kit描述子机制解析:从原子坐标到不变性特征

本文深入解析DeepMD-kit描述子机制,详细阐述如何将原子坐标转换为具有平移、旋转和排列不变性的特征表示。探讨了se_e2_a、se_e3等不同描述子的适用场景及性能优化技巧,帮助读者掌握这一关键技术在分子模拟中的应用实践。

weixin_42520661的博客 340

pytorch与matlab,Pytorch安装 与入门链接

Pytorch安装 与入门链接发布时间:2018-03-13 15:07,浏览次数:586, 标签:PytorchPytorch安装1)先是Anaconda安装配置,参照原来一篇博客2)Git Clone源代码进入虚拟环境后,采用conda安装:conda install pytorch torchvision -c soumith如果不成功则:那么最后还有一个选择,install from so...

weixin_35414887的博客 838

Opencv计算机视觉PPT-算法篇

01 02 03 04 05 06 07 08 09 010 011 012 013 014 015 016 017 018

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 204

40、5G NR射频要求解析

本文详细解析了5G NR射频相关要求,包括参考灵敏度与动态范围的定义、接收机对干扰信号的抗扰性要求(如阻塞、邻道选择性等)、辐射射频要求在FR1和FR2频段的差异,以及多标准无线电基站(MSR)的发展及其对射频要求的影响。内容涵盖测试模型、干扰场景、具体指标和实现挑战,为理解和应用5G NR射频规范提供了全面指导。

qsc901234的博客 245

pytorch学习笔记(三)

pytorch学习笔记(三) 1.前言 ​ 上次我们简单讲了一个神经网络的构成,这次我们小试牛刀,来试着基于CIFAR-10来训练一个分类器,CIFAR-10共有60000张彩色图像,这些图像是32*32,分为10个类,每类6000张图。这里面有50000张用于训练,构成了5个训练批,每一批10000张图;另外10000用于测试,单独构成一批。测试批的数据里,取自10类中的每一类,每一...

qq_35700335的博客 1929

汇川Easy系列斜坡函数功能块(支持状态输出)

IN rSetValue REAL 0.000000 0.000000 不保持 目标值 1IN rMaxValue REAL 0.000000 0.000000 不保持 最大目标值 2IN rMinValue REAL 0.000000 0.000000 不保持 最小目标值 3IN rSmoothTime REAL 100.000000 100.0000 不保持 最小到最大值平滑时间 单位 秒 4IN diTs DINT 10 10 不保持 函数调用周期采样时间中断时间 5。

RXXW_Dor的博客 457

计算机视觉篇---图像分类实战+理论讲解(1)- LeNet

pytorch 与tensorflow都是将深度学习的网络构造,训练,集成封装的,我们使用Pytorch 进行实例化,torch 官方测试案例Lenet。 import torch.nn as nn import torch.nn.functional as F 一般深度学习都需要torch的这两个大库,一个用于构建神经网络、卷积神经网络、残差网络。深度学习其实核心要素就是构建网络,训练数据,使得神经网络学习到一系列参数,使得神经网络看见我们传进去的参数就会输出预测的东西,一般来说入门都是先进行图像分类

free_girl_fang的博客 3179

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【Programming】

增强式学习,借助定义 Actions、States、Rewards 的方式不断训练机器循序渐进,学会执行某项任务的算法。常用算法有Q-LearningTDSarsa总结的比较好的一个机器学习框架TensorFlow:低级深度学习链接库,Brain Team 开发,15年11月公开源码Keras:高级深度学习链接库1)Tensor(张量)零维的 Tensor 是标量,1维的是向量,2维以上的是矩阵2)Flow(数据流)去陌生的城市,不会当地的语言,最好的方式,画一张图告诉司机你的目的地Node。

bryant_meng 3519

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Pytorch【7】Dataset与DataLoader数据集加载

上一节我们学会了损失函数、优化器和基础训练循环。但是之前示例是手写少量tensor数据,真实项目图片成千上万,需要一套规范的数据加载方案。数据集抽象类,定义怎么拿单条样本(索引取数据)加载器,对Dataset包装,实现batch、shuffle、多进程读取数据流水线:原始数据 → Dataset读取单样本 → Transform预处理 → DataLoader打包成batch送入网络__len__:返回数据集总样本数量,调用:按下标取一个样本,调用。

Beforthing的博客 226

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

机器学习教程,从入门到精通,深度学习入门语法知识点完全指南(PyTorch 版)(12)

本文为零基础读者量身定制的PyTorch深度学习入门指南,系统讲解深度学习核心原理与实战语法。从神经元、激活函数、损失函数等基础概念入手,结合Sigmoid、ReLU、MSE、CrossEntropy等关键知识点,辅以可运行的PyTorch代码示例,逐行注释详解。涵盖线性回归、CNN、GAN、ResNet等八大典型应用,揭示其在推荐系统、自动驾驶、医疗影像等企业场景中的实际价值,帮助读者快速掌握“原理—框架—应用”全链路技能。

qq_45746668的博客 366

Pytorch 【5】神经网络基础(nn.Module、卷积层、池化层、线性层)

前面我们学习了张量Tensor、自动求导Autograd,这两个是Pytorch最底层的基石。在真实项目中,我们不会手动去写大量求导逻辑,torch.nn模块封装好了神经网络各类层、损失函数,让我们快速搭建网络。本篇重点讲解nn.Module以及常用网络层:卷积Conv、池化Pool、全连接Linear。,和opencv、PIL的HWC相反!卷积之后进全连接,一定要flatten展平,否则维度对不上padding的作用:控制特征图尺寸不变,same padding池化层不改变通道数,只缩小高宽。

Beforthing的博客 177

第22章 实现一个完整的 RAG 系统(PyTorch) (终章)

本章构建了一个完整的本地RAG系统,集成BGE嵌入、Chroma向量库、BM25与RRF混合检索、BGE重排序器及Qwen2.5-7B-Instruct生成模型。通过结构化分块、增量索引、带引用的Prompt设计与拒答机制,实现精准问答。基于Recall@K与MRR量化评估各组件贡献,实测在RTX 4090上完成端到端推理,兼顾性能与可解释性,具备生产可用性。

AI服务生活 357

【AI 开发从入门到进阶 · 04】PyTorch 第一课:Tensor、自动求导与那套万能的「五步训练循环」

本文系统介绍PyTorch入门核心内容:为何选择PyTorch(动态图、生态优势)、Tensor的自动求导机制、构建神经网络的四大组件(nn.Module、Loss、Optimizer、DataLoader),并通过MNIST手写数字识别实战演示“五步训练循环”——前向传播、计算损失、反向传播、清零梯度、参数更新。强调zero_grad()、no_grad()、CrossEntropyLoss不加Softmax等关键细节,附可视化分析与排错清单。下篇将深入CNN卷积网络,提升图像分类性能。

信息安全领域优质创作者|操作系统领域专家 144

pytorch源码编译

【代码】pytorch源码编译。

lalading6543的博客 46
上一篇: 手把手教你python从零开始构建知识图谱
下一篇: 本科毕设题目是行人检测,可以做哪些工作以达到论文要求?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值