PyTorch深度学习框架学习记录(1)--安装,MNIST手写数字识别

news2024/11/24 8:42:45

文章目录

  • 框架发展
  • 安装
    • cpu版本
    • GPU版本
  • 学习记录
    • MNIST手写数字识别
      • 数据的准备工作

框架发展

  • Caffe框架(2015)

    • 优势:只写配置文件

    • 劣势:运行环境配置繁琐

  • Tensorflow 1.x(2016)

    • 开发成本高,上手较难
  • keras(2017)

    • 封装的API很好用
  • Tensorfolw 2.x(2018)

  • PyTorch (2019)

    • 上手比较容易,直接套模板,学习成本较低
    • 目前的主流框架
    • 向下支持较好,新版本可以使用老版本的API

安装

cpu版本

直接pip安装

pip install torch

GPU版本

  1. 安装CUDA和cudnn

    查看显卡支持的CUDA版本,版本是向下兼容的,所装的不能高于显示支持的版本

    nvidia -smi
    

在这里插入图片描述

提前去PyTorch官网Start Locally | PyTorch看一下torch目前所支持的版本,然后去CUDA的官网CUDA Toolkit 12.0 Downloads | NVIDIA Developer选择对应版本安装,

显卡支持版本-torch支持版本-CUDA版本-CUDNN版本都要对应

**可以看其他相关博客,我当时装的时候有借鉴下面的这些文章,对作者们表示感谢!**比如:

  • 手把手教你安装CUDA(一看就会)_时代&信念的博客-CSDN博客_cuda安装

  • 安装Pytorch-gpu版本(第一次安装 或 已经安装Pytorch-cpu版本后)_鸽泣的博客-CSDN博客_pytorch-gpu

  • 深度学习环境搭建:Windows10安装cuDNN_CDL_LuFei的博客-CSDN博客_cudnn安装教程win10

  • windows下CUDA的卸载以及安装_hi_1900的博客-CSDN博客_cuda卸载重装

安装完后在命令行输入:

    nvidia -v

显示CUDA版本就是成功了

在这里插入图片描述

  1. 安装torch

    就在PyTorch官网查看版本,我是使用conda安装的

在这里插入图片描述

​ 在conda创建虚拟环境以后就可以将那行命令输入。

​ 如果速度慢可以更改conda为国内镜像源

中间遇到很多问题,但是耐心,耐心,耐心,有问题慢慢解决,总会有解的,真的有很多博客给了我大量帮助,感谢作者,感谢CSDN。

安装完成后运行以下代码

import torch

print(torch.__version__)  # torch 版本
print(torch.cuda.is_available())  # torch 是否为gpu版本, 是的话会返回True

学习记录

MNIST手写数字识别

数据的准备工作

非常重要,但是只使用MNIST学习过程,所以并不需要深究,不同的数据集的处理都不一样

因为MNIST数据集很简单,由28×28的灰度图像组成,所以每张图片都是784个灰度数字。有脚本可以直接下载:

"""
download_mnist.py
下载数据
"""
from pathlib import Path
import requests

DATA_PATH = Path("data")
PATH = DATA_PATH / "mnist"

PATH.mkdir(parents=True, exist_ok=True)

URL = "http://deeplearning.net/data/mnist/"
FILENAME = "mnist.pkl.gz"

if not (PATH / FILENAME).exists():
        content = requests.get(URL + FILENAME).content
        (PATH / FILENAME).open("wb").write(content)

但是经常有网络问题,也可以去找MNIST的pkl格式的数据。

mnist.pkl.gz百度网盘链接

链接:https://pan.baidu.com/s/1nx2k5IPAnP1u6CkRR8NXfw?pwd=zbqy
提取码:zbqy
为了方便管理代码,所以单独将设置路径的代码写了一个py文件

"""
path_setting.py
设置数据所在路径
"""
import pickle
import gzip
from pathlib import Path

"""保存路径data/mnist/mnist.pkl.gz"""
DATA_PATH = Path("data")
PATH = DATA_PATH / "mnist"
FILENAME = "mnist.pkl.gz"

如果想看下数据集的内容,可以使用下面的方式:

"""
show.py
查看数据内容
"""
import matplotlib.pyplot as plt
import pylab
from path_setting import *

"""读取图像"""
with gzip.open((PATH / FILENAME).as_posix(), "rb") as f:
    ((x_train, y_train), (x_valid, y_valid), _) = pickle.load(f, encoding="latin-1")  # 读取数据
    """
    x_train: 训练数据
    y_train: 训练标签
    x_valid: 测试数据
    y_valid: 测试标签
    """


print(x_train.shape)  # 查看x_train的形状: (50000, 784)
print(x_valid.shape)  # 查看x_valid的形状: (10000, 784)
print(y_train.shape)  # 查看y_train的形状: (50000, )
print(x_train[0])  # 0号数据(第一个数据)的784个灰度值
print(y_train[0])  # 0号数据(第一个数据)的标签: 5
print(x_train[0].shape)  # 看一下x_train中一个图像的形状: (784,) 784个灰度值
plt.imshow(x_train[0].reshape(28, 28), cmap="gray")  # 更改图像的形状为28 × 28
pylab.show()  # 展示图像

运行结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/89673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正则表达式教程

视频:null正则表达式进阶是正则表达式30分钟入门40分钟进阶(绝对能学会)的第2集视频,该合集共计2集,视频收藏或关注UP主,及时了解更多相关视频内容。https://www.bilibili.com/video/BV19t4y1y7qP/?p2&…

如何用3D流体实现逼真水流效果?

华为应用市场在2022年HDC大会期间发布了一款3D水流主题,基于华为HMS Core Scene Kit服务能力,展现立体灵动的水流岛屿,可跟随用户指尖实现实时流体波动效果,既趣味又解压。 让变幻莫测的物质来实现我们在影视和游戏等多种应用场景…

sentinel 规则持久化

原始模式 如果不做任何修改,Dashboard 的推送规则方式是通过 API 将规则推送至客户端并直接更新到内存中: 这种做法的好处是简单,无依赖;坏处是应用重启规则就会消失,仅用于简单测试,不能用于生产环境。 se…

【Android】数据存储

一、文件存储 特点:openFileInput()和openFileOutput()读取设备上的文件。 优点:适用于存储大量的数据,可以存储图片、视频、文本等数据。 缺点:如果采用内部存储的方式,存储过量的数据可能会导致内存的不足&#xff…

2022年度手机行业排行榜(年度手机行业分析)

如今,随着手机普及率的不断增长,当前手机市场在逐渐饱和。在这一的态势下,手机行业中细分市场成为发展的必然趋势,随着市场细分和目标人群锁定的不断明确,手机市场中中小品牌手机的生存空间在逐渐被挤压,手…

消息队列,Unix的通信机制之一

最简单的消息内存的使用流程 ①ftok函数生成键值 ②msgget函数创建消息队列 ③msgsnd函数往消息队列发送消息 ④msgrcv函数从消息队列读取消息 ⑤msgctl函数进行删除消息队列 一个消息数据应该由以下一个结构体组成,举个例子 struct mymesg{long int mtype; /…

教你如何使用eBPF追踪Linux内核

【推荐阅读】 浅析linux内核网络协议栈--linux bridge 深入理解SR-IOV和IO虚拟化 深入linux内核架构--进程&线程 1. 还是先进入内核目录,执行下面的命令,确保内核代码是干净的。 $ make mrproper 2. 执行以下命令,开始对内核进行配…

Feign的性能优化

Feign底层的客户端实现有三种模式 1)URLConnection:默认实现,不支持连接池;(Feign发送http请求时,默认使用的客户端) 2)Apache HttpClient :支持连接池; 3&…

深度学习Week10-YOLOv5-Backbone模块实现(Pytorch)

● 🍨 本文为🔗365天深度学习训练营 中的学习记录博客 ● 🍦 参考文章:Pytorch实战 |第P9周:YOLOv5-Backbone模块实现(训练营内部成员可读) ● 🍖 原作者:K同学啊|接辅导、项目定制 类似于上周内…

也谈特征值和特征向量的几何意义

在当前的大数据分析时代,数据降维是一个重要的分析技术。而谈到数据降维,就离不开一门最为抽象难懂的数学学科分支——线性代数。有人可能会问:一堆向量和矩阵符号的线性代数到底有鸟用?简单地不科学地说,线性代数就是…

【tiktok小店运营小知识】 tiktok小店也会被封吗?有哪些原因呢?

最近开tiktok小店的小伙伴越来越多,运营过程中也会碰到很多问题。有小伙伴问, tiktok小店也会被封吗?有哪些原因呢? tiktok小店也会被封吗?有哪些原因呢? 答案是肯定的。TikTok需要进一步规范店铺经营&…

SRM是什么意思?盘点4个顶级SRM系统

SRM是什么意思?SRM系统,一般指供应商关系管理系统。供应商管理系统是采购管理系统的一个重要模块,强调企业与供应商之间协作共赢。相信在市场动荡的今天,企业与供应商之间的强关联、共命运对于企业来说不失为稳固根基、扩张业务的…

JavaScript系列之ES6默认导出与默认导入

文章の目录一、默认导出二、默认导入三、按需导出四、按需导入五、直接导入并执行模块代码写在最后一、默认导出 语法: export default 默认导出的成员每个模块中,只允许使用唯一的一次 export default,否则会报错! 二、默认导入…

Generative Modeling by Estimating Gradients of the Data Distribution阅读笔记

目录概述传统score-based generative modeling介绍score matchingLangevin dynamics传统score-based generative modeling存在的问题流型假设上的问题低密度区域的问题Noise Conditional Score Network噪声条件分数网络(Noise Conditional Score Networks)annealed Langevin dy…

Kafka 架构、核心机制和场景解读

摘要 Kafka 是一款非常优秀的开源消息引擎,以消息吞吐量高、可动态扩容、可持久化存储、高可用的特性,以及完善的文档和社区支持成为目前最流行的消息队列中间件。 Kafka 的开发社区一直非常活跃,在消息引擎的领域取的不俗成绩之后&#xf…

组装式应用新基建——小程序容器技术

近年来,面对不断变化的业务环境和快速迭代的业务需求,“组装式应用”凭借其灵活性、复用性等优势,成为了重要战略技术趋势。 一直以来,传统应用程序开发面临着诸多挑战:一是没有足够的开发能力;二是选错技…

sql中的!=操作符的天坑(务必警觉)(=在处理null时也是同样有坑)

最近在测试数据,偶尔需要写sql进行数据比对,例如这样的语句: if( column_a ! column_b, 1, 0),万万没想到就是这样的sql语句差点要了我的命。 其实对一般的数据,这条校验语句是没有问题的,最后再筛选一下1的…

Stm32旧版库函数10——A4988 单个步进电机 16拍

#include "stm32f10x_lib.h" #include "motor.h" u8 Step; void GPIO_Key(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin GPIO_Pin_0|GPIO_Pin_1; // 选中管脚9 GPIO_InitStructure.GPIO_Mode …

使用java实现 分布式任务调度平台XXL-JOB 部署及使用

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 详细的特性和优点参考官网地址:https://www.xuxueli.com/xxl-job/ 一、任务调度 0.下载官方源…

为什么微服务一定要有网关呢

一、什么是服务网关 服务网关 路由转发 过滤器1、路由转发:接收一切外界请求,转发到后端的微服务上去; 2、过滤器:在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过…