做ptt有什么好的模板网站,门户网站的建设意义,微信咋做自己的网站,wordpress怎么发外链一、PyTorch和TensorFlow
1、PyTorch
PyTorch是由Facebook开发的开源深度学习框架#xff0c;它在动态图和易用性方面表现出色。它以Python为基础#xff0c;并提供了丰富的工具和接口#xff0c;使得构建和训练神经网络变得简单快捷。
发展历史和背景
PyTorch 是由 Fac…一、PyTorch和TensorFlow
1、PyTorch
PyTorch是由Facebook开发的开源深度学习框架它在动态图和易用性方面表现出色。它以Python为基础并提供了丰富的工具和接口使得构建和训练神经网络变得简单快捷。
发展历史和背景
PyTorch 是由 Facebook 的 AI 研究团队开发的一个开源机器学习库最初发布于 2016 年。它的前身是 Torch这是一个使用 Lua 语言编写的科学计算框架。PyTorch 的出现标志着 Torch 的核心功能被转移到了 Python 这一更加流行和广泛使用的编程语言中同时保留了原有的灵活性和强大的功能。
PyTorch 很快就因其易用性和强大的灵活性在学术界获得了广泛认可。它特别受到研究人员的青睐因为它能够轻松地进行快速原型设计和实验。
主要特点和设计理念
动态计算图PyTorch 的核心特点之一是其动态也称为“即时”计算图。这意味着图的结构在运行时是可变的因此可以根据需要进行更改。这为研究人员提供了极大的灵活性使他们能够使用普通的 Python 编程构造复杂的动态网络结构。
易用性PyTorch 的另一个重要特点是其接口的直观性。它采用了 Python 的原生风格使得代码更加容易理解和编写。同时它提供了广泛的文档和教程使得即使是初学者也能够相对容易地上手。
强大的社区支持PyTorch 得益于其庞大的社区支持社区成员不断地贡献新的库和扩展使得 PyTorch 可以应用于计算机视觉、自然语言处理等各种领域。
与其他工具的集成PyTorch 可以轻松地与其他流行的数据科学和机器学习工具集成例如 NumPy、SciPy 和 Pandas。
2、TensorFlow
TensorFlow是由Google开发的深度学习框架最初以静态图著称但后来也引入了动态图机制。它支持多种编程语言包括Python、C和Java并拥有强大的分布式计算能力。
发展历史和背景
TensorFlow 是由 Google 的 Google Brain 团队开发的最初发布于 2015 年。它是 Theano 和 DistBelief 的直接后继者后者是 Google 的早期分布式机器学习努力的一部分。TensorFlow 很快在工业界和学术界获得了广泛的应用尤其是在需要大规模分布式训练和复杂模型部署的场景中。
Google 开发 TensorFlow 的主要目的是为了支持其广泛的产品和服务包括搜索、Gmail、Google 照片等这些服务需要处理大量的数据和复杂的模型。
主要特点和设计理念
静态计算图TensorFlow 最初采用的是静态计算图。在这种方式中首先定义一个图来表示计算然后通过图来运行实际的计算。这种方法使得 TensorFlow 在优化和扩展方面非常有效特别是在大规模的分布式系统中。
TensorFlow 2.x 的动态特性随着 2019 年 TensorFlow 2.x 的发布它引入了 Eager Execution这是一种动态图机制使得 TensorFlow 的使用更加直观和用户友好。Eager Execution 允许操作立即评估并返回它们的值而不是构建一个待稍后执行的图。这使得 TensorFlow 对于新手更加友好并且在某些方面与 PyTorch 更加相似。
广泛的应用范围TensorFlow 被设计用于各种规模的项目从小型个人项目到大型商业系统。它在移动和嵌入式设备上也有广泛的支持尤其是通过 TensorFlow Lite 实现。
强大的工具和社区TensorFlow 拥有强大的社区和工具生态系统包括 TensorBoard一种用于可视化训练过程的工具和大量用于不同领域的预训练模型。
2024最详细的AI框架对比指南—PyTorch与TensorFlow到底选谁-腾讯云开发者社区-腾讯云 (tencent.com)
TensorFlow vs PyTorch的优缺点与区别_tensorflow和pytorch哪个好-CSDN博客
二、DataLoader和Dataset
在使用Pytorch构建和训练模型的过程中经常需要把原始数据图片、文本等转换为张量的格式。对于小数据集我们可以手动导入但是在深度学习中数据集往往是比较大的这时pytorch的数据导入功能便发挥了作用Pytorch导入数据主要依靠 torch.utils.data.DataLoader和 torch.utils.data.Dataset这两个类来完成。
Dataset和DataLoader的作用
torch.utils.data.Dataset这是一个抽象类所以我们需要对其进行派生从而使用其派生类来创建数据集。最主要的两个函数实现为__Len__和__getitem__。 __init__可以在这里设置加载的data和label。 __Len__获取数据集大小 __getitem__根据索引获取一条训练的数据和标签。
torch.utils.data.DataLoader接收torch.utils.data.Dataset作为输入得到DataLoader它是一个迭代器方便我们去多线程地读取数据并且可以实现batch以及shuffle的读取等。 构建数据集-torch.utils.data.Dataset
torch.utils.data.Dataset可通过两种方式生成一种是通过内置的下载功能另一种便是自己实现。下载功能需要借助一些其他的包比如torchvision下载CIFAR10数据格式大致如下
import torch
import torchvision
train_set torchvision.datasets.CIFAR10(root./dataset, trainTrue, transformdataset_transform, downloadTrue)创建一个属于自己的数据集
任何自定义的数据集都要继承自torch.utils.data.Dataset然后重写两个函数__len__(self)和__getitem__(self, idx)。
下面是一个简单的自定义小型数据集以期能够理解它的创建方式。注意下面的示例中并没有通过__init__传入data和label而是在内部创建的。
import torch
from torch.utils.data import Datasetclass myDataset(Dataset):def __init__(self):#创建5*2的数据集self.data torch.tensor([[1,2],[3,4],[2,1],[3,4],[4,5]]) #5个数据的标签self.label torch.tensor([0,1,0,1,2])#根据索引获取data和labeldef __getitem__(self,index):return self.data[index], self.label[index] #以元组的形式返回#获取数据集的大小def __len__(self):return len(self.data)data myDataset()
print(fdata size is : {len(data)})print(data[1]) #获取索引为1的data和label输出
data size is : 5
(tensor([3, 4]), tensor(1))数据载入-torch.utils.data.DataLoader
torch.utils.data.Dataset通过__getitem__获取单个数据如果希望获取批量数据、shuffle或者其它的一些操作那么就要由torch.utils.data.DataLoader来实现了它的实现形式如下
data.DataLoader(dataset,batch_size 50,shuffle False,samplerNone,batch_sampler None,num_workers 0,collate_fn pin_memory False,drop_last False,timeout 0,worker_init_fn None,
)dataset(必需)用于加载数据的数据集通常是torch.utils.data.Dataset的子类实例。batch_size (可选)每个batch有多少个样本默认值为1。shuffle (可选)代表数据会不会被随机打乱在每个epoch开始的时候对数据进行重新排序。默认为False。False不打乱sampler(可选)自定义从数据集中取样本的策略如果指定这个参数那么shuffle必须为Falsebatch_sampler(可选)与sampler类似但一次返回一个批次的索引。不能与batch_size、shuffle和sampler同时使用。num_workers (可选)是数据载入器使用的进程数目默认为0意味着数据将在主进程中加载。collate_fn(可选)用于自定义sample 如何形成 batch sample 的函数。因为getitem只是得到一条数据collate_fun组成一个batch数据pin_memory如果设置为True那么data loader将会在返回它们之前将tensors拷贝到CUDA中的固定内存CUDA pinned memory中。drop_last(可选)如果设置为true那么最后的batch的大小如果小于batch_size那么则会丢弃。默认为False。timeout(可选)如果是正数表明等待从worker进程中收集一个batch等待的时间若超出设定的时间还没有收集到那就不收集这个内容了。这个numeric应总是大于等于0。默认为0。worker_init_fn(可选)它决定了每个数据载入的子进程开始时运行的函数
pytorch中的数据导入之DataLoader和Dataset的使用介绍_dataloader 能不能放到gpu上-CSDN博客
Dataloader重要参数与内部机制_dataloader参数-CSDN博客
三、TensorBoard可视化工具
TensorBoard是一个可视化工具它可以用来展示网络图、张量的指标变化、张量的分布情况等。特别是在训练网络的时候我们可以设置不同的参数比如权重W、偏置B、卷积层数、全连接层数等使用TensorBoader可以很直观的帮我们进行参数的选择。它通过运行一个本地服务器来监听6006端口。在浏览器发出请求时分析训练时记录的数据绘制训练过程中的图像。
什么是 TensorBoard
TensorBoard 是一组用于数据可视化的工具。它包含在流行的开源机器学习库 Tensorflow 中。TensorBoard 的主要功能包括
1可视化模型的网络架构
2跟踪模型指标如损失和准确性等
3检查机器学习工作流程中权重、偏差和其他组件的直方图
4显示非表格数据包括图像、文本和音频
5将高维嵌入投影到低维空间
TensorBoard算是包含在 TensorFlow中的一个子服务。 TensorFlow 库是一个专门为机器学习应用程序设计的开源库。 Google Brain 于 2011 年构建了较早的 DistBelief 系统。随着其用户群的快速增长它被简化并重构为我们现在称为 Tensorflow 的库。 TensorFlow 随后于 2015 年向公众发布。TensorBoard刚出现时只能用于检查TensorFlow的指标和TensorFlow模型的可视化但是后来经过多方的努力其他深度学习框架也可以使用TensorBoard的功能
调用 tensorboard --logdir你创建的文件夹名字 列如tensorboard --logdirlogs --port6007
tensorboard涉及的类SummaryWriter
全称是torch.utils.tensorboard.SummaryWriter
常用的方式就是
from torch.utils.tensorboard import SummaryWriterwriter SummaryWriter(logs)
writer.add_image(test, img_array,2, dataformatsHWC)writer.close() #一定要记得关闭
SummaryWriter 类提供了一个高级 API用于在给定目录中创建事件文件并向其中添加摘要和事件。 该类异步更新文件内容。 这允许训练程序调用方法以直接从训练循环将数据添加到文件中而不会减慢训练速度。 傻瓜教程TensorBoard可视化工具简单教程及讲解TensorFlow与Pytorch_tensorboard可视化梯度参数怎么看-CSDN博客Tensorboard的使用 ---- SummaryWriter类pytorch版-CSDN博客 四、Transformer
Transformer是一种用于自然语言处理NLP和其他序列到序列sequence-to-sequence任务的深度学习模型架构它在2017年由Vaswani等人首次提出。Transformer架构引入了自注意力机制self-attention mechanism这是一个关键的创新使其在处理序列数据时表现出色。
Transformer的一些重要组成部分和特点
1、自注意力机制Self-Attention这是Transformer的核心概念之一它使模型能够同时考虑输入序列中的所有位置而不是像循环神经网络RNN或卷积神经网络CNN一样逐步处理。自注意力机制允许模型根据输入序列中的不同部分来赋予不同的注意权重从而更好地捕捉语义关系。
2、多头注意力Multi-Head AttentionTransformer中的自注意力机制被扩展为多个注意力头每个头可以学习不同的注意权重以更好地捕捉不同类型的关系。多头注意力允许模型并行处理不同的信息子空间。
3、堆叠层Stacked LayersTransformer通常由多个相同的编码器和解码器层堆叠而成。这些堆叠的层有助于模型学习复杂的特征表示和语义。
4、位置编码Positional Encoding由于Transformer没有内置的序列位置信息它需要额外的位置编码来表达输入序列中单词的位置顺序。
残差连接和层归一化Residual Connections and Layer Normalization这些技术有助于减轻训练过程中的梯度消失和爆炸问题使模型更容易训练。
5、编码器和解码器Transformer通常包括一个编码器用于处理输入序列和一个解码器用于生成输出序列这使其适用于序列到序列的任务如机器翻译。
【超详细】【原理篇实战篇】一文读懂Transformer-CSDN博客
The Annotated Transformer的中文注释版1 - 知乎 (zhihu.com)
torchvision
torchvision是pytorch的一个图形库它服务于PyTorch深度学习框架的主要用来构建计算机视觉模型。torchvision.transforms主要是用于常见的一些图形变换。以下是torchvision的构成 torchvision.datasets: 一些加载数据的函数及常用的数据集接口 torchvision.models: 包含常用的模型结构含预训练模型例如AlexNet、VGG、ResNet等 torchvision.transforms: 常用的图片变换例如裁剪、旋转等 torchvision.utils: 其他的一些有用的方法。
Transformer的使用
1、transforms.ToTensor()
torchvision.transforms 数据预处理ToTensor()-CSDN博客
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter SummaryWriter(logs)
img Image.open(data/train/bees_image/17209602_fe5a5a746f.jpg)# ToTensor
trans_totensor transforms.ToTensor()
img_tensor trans_totensor(img)
writer.add_image(ToTensor, img_tensor)writer.close() 2、数据归一化处理transforms.Normalize
Normalize — Torchvision main documentation (pytorch.org)
数据归一化处理transforms.Normalize-CSDN博客
torchvision中Transform的normalize参数含义, 自己计算mean和std可视化后的情况其他必要的数据增强方式_transforms.normalize(mean[0.485, 0.456, 0.406], s-CSDN博客
功能逐channel的对图像进行标准化均值变为0标准差变为1可以加快模型的收敛 output (input - mean) / std mean:各通道的均值 std各通道的标准差 inplace是否原地操作
3、指定图像的大小torchvision.transforms.Resize()
Resize — Torchvision main documentation (pytorch.org)
torchvision.transforms.Resize() 是 PyTorch 中 torchvision 库中的一个数据预处理类用于将 PIL.Image 或者 ndarray 转换成指定大小的图像。
Pytorch transforms.Resize()的简单用法_torchvision.transforms.resize-CSDN博客
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter SummaryWriter(logs)
img Image.open(data/train/bees_image/17209602_fe5a5a746f.jpg)# Resize
print(img.size)
trans_resize transforms.Resize((512,512))
img_resize trans_resize(img)
img_resize trans_totensor(img_resize) #img_resize PIL-tensor
print(img_resize)
writer.add_image(Resize, img_resize,0)writer.close()
4、 数据变换组合torchvision.transforms.Compose()
Compose — Torchvision main documentation (pytorch.org)
transforms.Compose是PyTorch中的一个实用工具用于创建一个包含多个数据变换操作的变换对象。这些变换操作通常用于数据预处理例如图像数据的缩放、裁剪、旋转等。使用 transforms.Compose 可以将多个数据变换组合在一起以便将它们应用于数据。
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter SummaryWriter(logs)
img Image.open(data/train/bees_image/17209602_fe5a5a746f.jpg)# compose()中的参数需要是一个列表
# 在compose中 参数数据是 transforms类型
# compose - resize -2
trans_resize_2 transforms.Resize(512)
trans_compose transforms.Compose([trans_resize_2, trans_totensor])
img_resize_2 trans_compose(img)
writer.add_image(Resize, img_resize_2,1)writer.close()
5、随机裁剪torchvision.transforms.RandomCrop
RandomCrop — Torchvision main documentation (pytorch.org)
transforms.RandomCrop()是PyTorch中的一个数据增强操作用于随机裁剪图像。它可以在图像的任意位置随机裁剪出指定大小的图像,并返回裁剪后的图像。这个操作可以增加数据集的多样性,提高模型的泛化能力。
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transformswriter SummaryWriter(logs)
img Image.open(data/train/bees_image/17209602_fe5a5a746f.jpg)# RandomCrop
trans_totensor transforms.ToTensor()
trans_random transforms.RandomCrop(100)
#其中trans_compose_2将会对输入的图像进行随机裁剪为100 x 100大小的正方形
#并将其转换为Tensor格式。
trans_compose_2 transforms.Compose([trans_random, trans_totensor])for i in range(10):img_crop trans_compose_2(img)writer.add_image(RandomCrop,img_crop,i)writer.close()6、其他参考
torchvision.transforms - PyTorch中文文档 (pytorch-cn.readthedocs.io)
torchvision.transforms 常用方法解析含图例代码以及参数解释_torchvision 斜切-CSDN博客
五、图像处理 PIL
Python Pillow PIL 库的用法介绍Pillow库是一个Python的第三方库。
PIL库是一个具有强大图像处理能力的第三方库不仅包含了丰富的像素、色彩操作功能还可以用于图像归档和批量处理。
PIL库支持图像存储、显示和处理它能够处理几乎所有图片格式可以完成对图像的缩放、剪裁、叠加以及向图像添加线条、图像和文字等操作。
PIL库主要可以实现图像归档和图像处理两方面动能需求:
1图像归档对图像进行批处理、生成图像预览、图像格式转换等。
2图像处理图像基本处理、像素处理、颜色处理等。
1、安装
pip install pillow -i https://pypi.tuna.tsinghua.edu.cn/simple
2、PIL库 Image 类解析
Image是PIL最重要的类它代表一张图片引入这个类的方法如下
from PIL import Image
在 PIL 中任何一个图像文件都可以用 Image 对象表示。Image类的图像读取和创建方法如下(共5个: Python 图像处理 PIL 第三方库详细使用教程更新中-CSDN博客
六、OpenCV
什么是OpenCV它有什么作用
OpenCV全称为Open Source Computer Vision Library是一个开源的计算机视觉库由英特尔公司发起并开发支持多种编程语言如C、Python、Java等旨在为计算机视觉领域的研究、开发和应用提供一组通用的工具和算法。
OpenCV可以用于处理数字图像和视频数据其功能包括图像和视频的读取、写入、显示、变换、滤波、特征提取、目标检测、人脸识别、物体跟踪、相机标定、三维重建、机器学习等。
OpenCV最初由Intel开发现在已经成为了一个开源项目其源代码可以免费获取和使用。
OpenCV提供了许多计算机视觉中常用的算法和工具例如 读取和保存图像和视频数据 图像和视频的显示、缩放、剪切和旋转等操作 直方图均衡化、图像滤波和形态学操作等图像处理技术 特征提取和描述符匹配算法如SIFT和SURF等 目标检测和跟踪算法如Haar Cascade和MeanShift等 人脸检测和识别算法如LBPH和FisherFace等 相机标定和三维重建算法如SfM和PnP等 机器学习算法如SVM、KNN和随机森林等
除了以上的功能OpenCV还有一个重要的特点就是跨平台性可以在Windows、Linux、macOS等操作系统上运行并且支持多种编程语言如C、Python和Java等。 pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simpleOpenCV-Python是一个Python绑定库旨在解决计算机视觉问题。
OpenCV-Python使用了Numpy这是一个高度优化的库用于使用MATLAB风格的语法进行数值运算。所有OpenCV数组结构都可以转换为Numpy数组。这也使得它更容易与其他使用Numpy的库集成如SciPy和Matplotlib。 OpenCV最详细入门一-python代码全部可以直接运行_opencv python-CSDN博客