【深度学习】入门深度学习相关

1.知识点&&小问题

参考视频:最详细的 Windows 下 PyTorch 入门深度学习环境安装与配置 CPU GPU 版 | 土堆教程

1.Pytorch和TensorFlow都是python的包/库。

2.为什么使用Anaconda?Anaconda的优势是有虚拟环境。

3.计算机底层对于Python语言:
Python语法–>Python Interpreter解释器–>计算机

4.深入学习与GPU显卡:
GPU–>CUDA driver驱动–>CUDA Runtime–> Pytorch/TensorFlow–>计算机应用

5.CUDA版本:
驱动版本要高于Runtime版本

6.conda建立虚拟环境:

conda create -n 虚拟环境名字 python=3.8 -c 镜像

清华镜像:https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main

7.conda删除虚拟环境:

condaremove –n 虚拟环境名字--all

8.通道channels:

condaconfig --add channels 通道地址
condaconfig --remove channels 通道地址

按照优先级来查找,查看配置文件中的优先级:

conda config --show
conda config --get

不推荐乱加channels,需要加的时候-c

9.确定显卡算力
CUDA:https://en.wikipedia.org/wiki/CUDA
1060显卡对应算力为6.1,CUDA SDK版本8.0以后都可以

10.在Anaconda虚拟环境中,conda install和pip install有什么区别?
conda 可以管理 pip 安装的包,但不推荐混合使用,因为这可能导致依赖性问题。如果你使用 conda 创建了一个虚拟环境,最好是先用 conda 安装尽可能多的包,然后再用 pip 安装那些在 conda 中不可用的包。
去这里找:

C:\path\to\conda\envs\<虚拟环境名称>\Lib\site-packages\

11.conda安装了OpenCV后Python无法找到
conda install opencv默认安装的最新版本4.6.0,但是import cv2无法找到。
原因:换个版本,推荐用pip install opencv-python
后面又遇到cmd中可以识别cv2,但是pycharm中找不到,将cv2,这个文件夹中虚拟环境中的Lib/site_package中复制到Lib下。
(很傻逼的问题,浪费一上午)

2.安装pytorch

先确定CUDA driver版本:11.7

nvidia-smi
nvcc -V

pytorch历届版本官网

conda install pytorch==1.13.0 torchvision==0.14.0 torchaudio==0.13.0 pytorch-cuda=11.7 -c pytorch -c nvidia

不行的话,添加国内镜像:https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/win-64/

在pycharm中检查编译器来源,确保是来源于torch下的Python3.8

3.项目中的包安装情况分析

配置pycharm中虚拟环境后,项目中提示找不到包,
通常是:
1.conda install 包名,
2.pip install 包名,
3.如果还是找不到包,百度搜索是不是通道不对,网络问题加镜像,
4.如果有requirements.txt,直接pip install一整个。

4.安装jupyter

一个实时交互的Python脚本工具
安装Anaconda的时候base环境会安装好Jupyter,但是需要再torch虚拟环境中安装。

conda install nb_conda

在这里插入图片描述

5.Python深度学习两大法宝

dir()查看功能名称, help()查看功能

6.数据集

(1)建立对应标签文件

# 建立标签对应文件
import os
root_dir = "dataset/train"
target_dir = "bees_image"img_name = os.listdir(os.path.join(root_dir, target_dir)) # list类型
label = target_dir.split("_")[0] # 写入文件的值
out_dir = "bees_label"for i in img_name:file_name = i.split('.jpg')[0]with open(os.path.join(root_dir, out_dir, "{}.txt".format(file_name)),"w")as f:f.write(label)

(2)建立Dataset类

from torch.utils.data import Dataset
from PIL import Image
import osclass MyData(Dataset):def __init__(self, root_dir, label_dir):self.root_dir = root_dirself.label_dir = label_dirself.path = os.path.join(self.root_dir, self.label_dir)self.img_path = os.listdir(self.path)def __getitem__(self, item):img_name = self.img_path[item]img_item_path = os.path.join(self.root_dir, self.label_dir, img_name)# D:\code\learn_torch\pythonProject\dataset\train\ants\0013035.jpgimg = Image.open(img_item_path)label = self.label_dirreturn img, label # 得到某一张图片和其标签类型def __len__(self):return len(self.img_path) # 标签下数据集长度root_dir = "D:\\code\\learn_torch\\pythonProject\\dataset\\train"
ants_label_dir = "ants_image"
bees_label_dir = "bees_image"
ants_dataset = MyData(root_dir, ants_label_dir)
bees_dataset = MyData(root_dir, bees_label_dir)
train_dataset = ants_dataset + bees_dataset # 相加是Dataset类内置功能
# image, label = ants_dataset[0]
print(len(ants_dataset))
print(len(bees_dataset))
print(len(train_dataset))
image, label = train_dataset[124]
image.show()

(3)tensorboard模块

在PyTorch中,有一个工具叫做 torch.utils.tensorboard,它提供了与ensorFlow的TensorBoard相同的可视化功能可以可视化你的模型的训练过程、网络结构、参数分布等。

from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Imagewriter = SummaryWriter("logs")# 导入图片
image_path = "data/train/ants_image/6743948_2b8c096dda.jpg"
img_PIL = Image.open(image_path)
img_array = np.array(img_PIL)writer.add_image("img_test", img_array,2, dataformats='HWC')
writer.close()

tips:add_image提供单张图片的接收,而add_images提供多batch_size的接收。

(4)transforms模块

在PyTorch中,transforms模块提供了一系列用于数据预处理和数据增强的功能。它可以帮助您对输入数据进行各种转换,以准备数据用于训练神经网络模型。
以下是transforms模块的常见用途和功能:

  • 数据预处理:transforms模块提供了各种常见的数据预处理操作,例如调整大小、剪裁、旋转、翻转、标准化等。这些操作可用于对输入图像或数据进行预处理,以使其适应模型的输入要求。
  • 数据增强:transforms模块还提供了各种数据增强操作,例如随机裁剪、随机翻转、随机旋转、颜色抖动等。这些操作可以通过对训练数据进行随机变换来增加样本的多样性,从而提高模型的泛化能力。
  • 转换为Tensor:transforms模块还包括将数据转换为PyTorch
    Tensor对象的功能。这对于将输入数据转换为可以输入到PyTorch模型的张量非常有用。
  • 多个转换的组合:transforms模块允许您将多个转换操作组合在一起,形成一个转换管道。您可以按照特定的顺序应用这些转换来对数据进行预处理和增强。
from PIL import Image
from torchvision import transforms
import cv2
from torch.utils.tensorboard import SummaryWriter
## 三种类型
img_path = "data/train/ants_image/0013035.jpg"
img = Image.open(img_path)
print(type(img))cv_img =cv2.imread(img_path)
print(type(cv_img))tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(img)
print(type(tensor_img))writer = SummaryWriter("logs")
writer.add_image("Tensor_img", tensor_img)
writer.close()

踩坑:新版的tensorboard参数:tensorboard --logdir “logs”

下面是各个transforms的工具使用,transforms类大都含有魔法函数call,可以将声明的实例化对象直接作为函数传参调用。

from PIL import Image
from torchvision import transforms
from torch.utils.tensorboard import SummaryWriterwriter = SummaryWriter("logs")
img_path = "data/train/bees_image/16838648_415acd9e3f.jpg"
img = Image.open(img_path)
print(type(img))
# ToTensor
trans_tensor = transforms.ToTensor()
trans_tensor_img = trans_tensor(img)
writer.add_image("Tensor", trans_tensor_img)
print(type(trans_tensor_img))
# PILToTensor
trans_PIL= transforms.PILToTensor()
trans_PIL_img = trans_PIL(img)
print(type(trans_PIL_img))
# Normalize
trans_norm = transforms.Normalize([0.5, 0.5, 0.5],[0.5, 0.5, 0.5])
img_norm = trans_norm(trans_tensor_img)
# writer.add_image("Normalize", img_norm)
print(img_norm[0][0][0])
# Resize
print(img.size)
trans_resize = transforms.Resize((100,100))
img_resize = trans_resize(img)
print(img_resize.size)
img_resize = trans_tensor(img_resize)
writer.add_image("resize", img_resize)
# Compose
trans_compose = transforms.Compose([trans_resize, trans_tensor])
img_compose = trans_compose(img)
writer.add_image("compose", img_compose)
# randomcrop 随机裁剪
trans_randomcrop = transforms.RandomCrop(100)
trans_compose2 = transforms.Compose([trans_randomcrop, trans_tensor])
for i in range(10):img_randomcrop = trans_compose2(img)writer.add_image("random_crop", img_randomcrop, i)writer.close()

(5)结合CIFAR10 Dataset的transforms使用

import torchvision
from torch.utils.tensorboard import SummaryWriter# PIL to ToTensor
dataset_transform = torchvision.transforms.Compose([torchvision.transforms.ToTensor()])train_set = torchvision.datasets.CIFAR10(root="./CIFAR10_dataset", train=True, transform=dataset_transform, download=True)
test_set = torchvision.datasets.CIFAR10(root="./CIFAR10_dataset", train=False, transform=dataset_transform, download=True)
# print(test_set[0])
# print(train_set.classes)d
# img, target = test_set[0]
# print(img)
# print(target)
# img.show()
#
writer = SummaryWriter("logs")for i in range(10):img, target = train_set[i]writer.add_image("train_set", img, i)
writer.close()

(6)dataloader类:如何&怎样拿数据

作用:封装数据集并提供批量处理、打乱数据、并行加载等。

  • 批量加载:机器学习模型通常在训练期间不会一次处理整个数据集,而是将数据集分成小批量(batches)。DataLoader
    可以自动地将数据集分成指定大小的批次,每个批次可以并行地通过模型进行训练。
  • 数据打乱:为了使模型训练更加稳健,通常需要在每个epoch开始时打乱数据。DataLoader
    提供了一个简单的方式来在每个epoch自动打乱数据集。
  • 并行数据加载:通过使用Python的 multiprocessing,DataLoader
    能够在训练过程中并行加载数据,这样可以显著减少数据加载的时间,特别是在处理大型数据集和复杂的预处理过程时。
  • 自定义数据抽样:DataLoader 允许使用自定义的 Sampler 或 BatchSampler
    来控制数据的抽样过程,这在处理不均衡数据集或其他特殊需求时特别有用。
  • 自动管理数据集迭代:DataLoader 与 PyTorch 的 Dataset
    类联动,可以自动地进行数据集迭代,并在一个epoch完成后重置,为下一个epoch做好准备。
import torchvision
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
# 获得CIFA10数据集,直接拿到ToTensor格式的
test_dataset = torchvision.datasets.CIFAR10(root="./CIFAR10_dataset", train=False, transform=torchvision.transforms.ToTensor())test_loader = DataLoader(dataset=test_dataset, batch_size=64, shuffle=True, num_workers=0, drop_last=True)writer = SummaryWriter("logs")
step = 0
for data in test_loader:img, target = data# print(img.shape)# print(target)writer.add_images("64_batch_size", img, step)step = step + 1writer.close()

7.神经网络nn

(1)卷积操作

卷积操作示意图:https://github.com/vdumoulin/conv_arithmetic/blob/master/README.md

import torch
import torch.nn.functional as Finput = torch.tensor(([1,2,0,3,1],[0,1,2,3,1],[1,2,1,0,0],[5,2,3,1,1],[2,1,0,1,1]))
kernel = torch.tensor(([1,2,1],[0,1,0],[2,1,0]))print(input.shape)
input = torch.reshape(input, (1,1,5,5))
kernel = torch.reshape(kernel, (1,1,3,3))output1 = F.conv2d(input, kernel, stride=1)
print(output1)outout2 = F.conv2d(input, kernel, stride=2)
print(outout2)

torch.reshape(input, (1, 1, 5, 5)) 将 input 张量重新形状为一个具有 (1, 1, 5, 5) 形状的新张量。这里的形状参数 (1, 1, 5, 5) 表示:

  • 第一个 1 表示批次大小(batch size),意味着这个张量中只有一个数据样本
  • 第二个 1 表示通道数(channel),意味着数据样本只有一个颜色通道(例如,灰度图)。
  • 第三个和第四个数字 5 和 5 表示图像的高度和宽度,意味着数据样本是一个 5x5 的图像。

张量:实际为多维数组,例如三维张量表示图片信息,将图片转换成计算机可以看懂的三维数组形式。
以3维张量为例:对于单个图像,3维张量通常有形状(C, H, W),其中 C 表示颜色通道数(如RGB图像中的3),H 表示图像的高度,W 表示图像的宽度。

conv2d(input, kernel, stride=1)
stride 的参数设置为1,意味着横向和纵向移动都为1。

参数padding:填充作用,一般填充为0
在这里插入图片描述

# 接上面
outout3 = F.conv2d(input, kernel, stride=1, padding=1)
print(outout3)

##(2)卷积代码:

import torch
## 多个卷积核
import torchvision  
from torch.utils.data import DataLoader
from torch import nn
from torch.nn import Conv2d
from torch.utils.tensorboard import SummaryWriterdataset = torchvision.datasets.CIFAR10(root="CIFAR10_dataset", train=False, transform=torchvision.transforms.ToTensor(), download=True)
dataloader = DataLoader(dataset, batch_size=64)class Tudui(nn.Module):def __init__(self):super().__init__()self.conv1 = Conv2d(in_channels=3, out_channels=6, kernel_size=3, stride=1, padding=0)def forward(self, x):x = self.conv1(x)return xtudui = Tudui()
writer = SummaryWriter("logs")step = 0
for data in dataloader:imgs, target = dataoutput = tudui(imgs)print(imgs.shape)print(output.shape)# torch.Size([64, 3, 32, 32])writer.add_images("input", imgs, step)# # torch.Size([64, 6, 30, 30])output = torch.reshape(output, (-1,3,30,30))writer.add_images("output", output, step)step = step + 1
writer.close()

这一步是为了保证输出,因为传入参数要为三通道格式,多余的加入了一个批次的batch_size中,所以8×*8变成了16×8

 output = torch.reshape(output, (-1,3,30,30))

在这里插入图片描述
具体参数查看官网:https://pytorch.org/docs/1.8.1/generated/torch.nn.Conv2d.html#torch.nn.Conv2d

以下图为例:第一步为了保证不丢失边缘部分,肯定是做了padding填充
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

关于C#操作SQLite数据库的一些函数封装

主要功能&#xff1a;增删改查、自定义SQL执行、批量执行&#xff08;事务&#xff09;、防SQL注入、异常处理 1.NuGet中安装System.Data.SQLite 2.SQLiteHelper的封装&#xff1a; using System; using System.Collections.Generic; using System.Data.SQLite; using System.…

天眼护航 安全无界:天通哨兵PS02—电力巡检保护的智能利器

在电力行业中&#xff0c;输电线路的安全稳定运行对于保障社会经济活动至关重要。然而&#xff0c;广阔的输电线路常常穿越复杂的地形和恶劣的自然环境&#xff0c;给电力巡检和保护工作带来了巨大挑战。 为了提高巡检效率和响应速度&#xff0c;更好地保障电力设施的安全运行…

前端三剑客 —— CSS (第三节)

目录 上节回顾&#xff1a; 1.CSS使用有以下几种样式; 2.选择器 1.基本选择器 2.包含选择器 3.属性选择器 [] 4.伪类选择器 &#xff1a; 5.伪元素选择器 ::before :after 3.常见样式的使用 常见样式参考表 一些特殊样式 媒体查询 自定义字体 变换效果 translate&…

深入PostgreSQL中的pg_global表空间

pg_global表空间的位置 在PG当中&#xff0c;一个实例(cluster)初始化完以后&#xff0c;你会看到有下边两个与表空间相关的目录生成&#xff1a; $PGDATA/base $PGDATA/global 我们再用元命令\db以及相关视图看看相应的表空间信息&#xff1a; postgres# \db …

雨云服务器:当清风遇上明月,服务器的美好新时代

引言&#xff1a;为什么说服务器是网站的“心脏”&#xff1f; 在数字时代&#xff0c;网站已经成为企业和个人展示自己的重要平台。然而&#xff0c;想要网站运行得稳定、快速&#xff0c;除了好的内容外&#xff0c;一个稳定、高效的服务器也是至关重要的。就像人体需要有一…

【解决】Unity Profile | FindMainCamera

开发平台&#xff1a;Unity 2020.3.7f1c1 关键词&#xff1a;FindMainCamera   问题背景 ModelViewer 是开发者基于 UnityEngine 编写的相机控制组件。ModelView.Update 中调度52次并触发3次GC.Collect。显然并不期望并尽可能避免 Update 造成的GC 问题。事实上 FindMainCame…

Qt | Qt 的重要文件简介(推荐)

一、项目文件(pro 文件)及其语法 1、项目文件(pro 文件)的作用是列举项目中的源文件, 2、pro 文件的语法形式为:“变量 操作符 值”,比如 QT += widgets,多个值之间使用空格分开。 3、pro 文件的注释:从“#”开始,直至本行结束。 4、pro 文件的操作符见下表 5、pro 文…

Ansible批量操作(上传文件、删除文件指定文件内容、执行sh文件等)

官方网站 https://www.ansible.com/ 一、Ansible 简介 1、Ansible是新出现的自动化运维工具&#xff0c;完全基于Python开发&#xff0c;集合了众多运维工具&#xff08;puppet、chef、func、fabric&#xff09;的优点&#xff0c;实现了批量系统配置、批量程序部署、批量运行…

随机生成Long全范围数

随机生成Long全范围数 前言实现思路主要代码分区随机生成过程案例&#xff1a;随机生成100个数 朴素的比较总结 前言 使用自带的Random.nextLong()函数生成Long型的长整数&#xff0c;范围比较小&#xff0c;如下图。100个随机数没看见10以内的数字。所以考虑实现随机化生成大…

计算机网络:局域网的数据链路层

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

Android 高德地图

1.获取Key 进入高德开放平台控制台&#xff0c;创建一个新应用。在创建的应用上点击"添加key"按钮&#xff0c;在弹出的对话框中&#xff0c;依次输入key名称&#xff0c;选择服务平台为“Android平台”&#xff0c;输入发布版安全码 SHA1、以及 Package。 获取 S…

Windows系统基于WSL子系统的torchquantum安装记录GPU版本

子系统需要的环境&#xff1a; anaconda/miniconda、pip换源(清华源) 1.准备 torchquantum最新版本可以从github上找到&#xff0c;直接clone/下载整个project&#xff0c;查看环境要求&#xff0c;需要安装pytorch和tensorflow 新建一个conda环境&#xff0c;注意python最…

Docker,anaconda环境的部署与迁移

功能上线将提上日程&#xff0c;但是如何将我windows环境下的程序放到linux服务器的测试环境跑通呢&#xff1f;这是我这整个清明假期将要解决的一件事&#xff0c;最蠢的办法就是看自己的环境下有哪些依赖&#xff0c;如何到服务器上一个一个下&#xff0c;但是首先这个方法很…

操作系统导论课后作业-第十七章答案

课程作业-第十七章&#xff1a; 17.1首先以标志flag -n 10 -H 0 -p BEST -s 0运行程序来产生一些随机的分配和空闲。你能预测malloc()/free()会返回什么吗&#xff1f;你可以在每次请求后猜测空闲列表的状态吗&#xff1f;随着时间的推移&#xff0c;你对空闲列表有什么发现&a…

c++20协程详解(三)

前言 前面两节我们已经能够实现一个可用的协程框架了。但我们一定还想更深入的了解协程&#xff0c;于是我们就想尝试下能不能co_await一个协程。下面会涉及到部分模板编程的知识&#xff0c;主要包括&#xff08;模板偏特化&#xff0c;模板参数列表传值&#xff0c;模板函数…

谷歌(Google)技术面试——在线评估问题(三)

谷歌&#xff08;Google&#xff09;面试过程的第一步&#xff0c;你可能会收到一个在线评估链接。 评估有效期为 7 天&#xff0c;包含两个编码问题&#xff0c;需要在一小时内完成。 以下是一些供你练习的在线评估问题。 在本章结尾处&#xff0c;还提供了有关 Google 面试不…

进销存管理系统:食品批发零售迈向数字化未来-亿发

随着消费逐步复苏&#xff0c;食品批发零售行业也迎来了客流的回升&#xff0c;实体店重新焕发了生机。然而&#xff0c;随着数字化时代的来临&#xff0c;传统的食品批发零售企业面临着新的挑战和机遇。些企业正积极实施数字化转型&#xff0c;通过布局线上线下多业态的融合发…

分布式事务之Seata使用

分布式事务解决方案之Seata Seata的概念 Seata是阿里巴巴开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式解决方案。 Seata官网给出的架构示例如下&#…

ruoyi-nbcio-plus基于vue3的flowable流程设计器主界面升级修改

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

mysql故障排查

MySQL是目前企业最常见的数据库之一日常维护管理的过程中&#xff0c;会遇到很多故障汇总了常见的故障&#xff0c;MySQL默认配置无法满足高性能要求 一 MySQL逻辑架构图 客户端和连接服务核心服务功能存储擎层数据存储层 二 MySQL单实例常见故障 故障1 ERROR 2002 (HY000)…