Einops 张量操作快速入门

张量,即多维数组,是现代机器学习框架的支柱。操纵这些张量可能会变得冗长且难以阅读,尤其是在处理高维数据时。Einops 使用简洁的符号简化了这些操作。

Einops (Einstein-Inspired Notation for operations),受爱因斯坦运算符号启发的张量操作库,已成为AI工程师无缝操控张量以产生AI的必备工具。这是我编写的简单教程,旨在帮助没有 Einops 经验的人创建复杂而实用的神经网络。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 

在开始之前,让我们先使用 pip 安装 Einops:

pip install einops

1、Einops的3个基本操作

Einops 围绕三个核心操作:重排、规约和重复。让我们通过示例深入探讨每个操作。

1.1 重排

重排(rearrange)让你可以通过一个容易看懂的操作符改变张量的维度和形状。

import torch
from einops import rearrange

# Create a 4D tensor of shape (batch, channels, height, width)
tensor = torch.rand(10, 3, 32, 32)  # Example: a batch of 10 RGB images 32x32
# Rearrange to (batch, height, width, channels) for image processing libraries that expect this format
rearranged = rearrange(tensor, 'b c h w -> b h w c')

上面的操作将通道 c移至最后一个维度,这是 matplotlib 等库中图像处理的常见要求。

1.2 规约

规约(reduce) 对张量的指定维度(如总和、平均值或最大值)应用规约操作,从而简化张量聚合任务。

from einops import reduce

# Reduce the tensor's channel dimension by taking the mean, resulting in a grayscale image
grayscale = reduce(tensor, 'b c h w -> b h w', 'mean')

此操作通过对通道 c 进行平均,将我们的 RGB 图像转换为灰度图像。

1.3 重复

重复(repeat)沿任意维度复制张量,从而轻松实现数据增强或张量扩展。

from einops import repeat

# Repeat each image in the batch 4 times along a new dimension
repeated = repeat(tensor, 'b c h w -> (repeat b) c h w', repeat=4)

上面的操作通过重复每个图像来增加数据集的大小,这对于数据增强非常有用。

2、Einops的高级模式

Einops 以其直观处理复​​杂重塑模式的能力而出名。

2.1 拆分和合并通道

将 RGB 通道拆分为单独的张量,对其进行处理,然后合并回去。

# Split channels
red, green, blue = rearrange(tensor, 'b (c rgb) h w -> rgb b c h w', rgb=3)

# Example processing (identity here)
processed_red, processed_green, processed_blue = red, green, blue
# Merge channels back
merged = rearrange([processed_red, processed_green, processed_blue], 'rgb b c h w -> b (rgb c) h w')

2.2 展平和反展平

展平完全连接层的空间维度,然后反展平。

# Flatten spatial dimensions
flattened = rearrange(tensor, 'b c h w -> b (c h w)')

# Example neural network operation
# output = model(flattened)
# Unflatten back to spatial dimensions (assuming output has shape b, features)
# unflattened = rearrange(output, 'b (c h w) -> b c h w', c=3, h=32, w=32)

2.3 批量图像裁剪

批量裁剪图像中心。

# Assuming tensor is batch of images b, c, h, w
crop_size = 24
start = (32 - crop_size) // 2
cropped = rearrange(tensor, 'b c (h crop) (w crop) -> b c h w', crop=crop_size, h=start, w=start)

上面的操作从批次中的每个 32x32 图像中提取居中的 24x24 裁剪图像。

3、高级用例:实现注意力机制

注意力机制,尤其是自注意力(self attention),已成为现代深度学习架构(如 Transformers)的基石。让我们看看 Einops 如何简化自注意力机制的实现。

自注意力允许模型衡量输入数据不同部分的重要性。它是使用从输入数据中得出的查询 (Q)、键 (K) 和值 (V) 来计算的。

3.1 示例:简化的自注意力

为简单起见,我们将演示自注意力的基本版本。请注意,实际实现(如 Transformers 中的实现)包括掩码和缩放等其他步骤。

import torch
import torch.nn.functional as F
from einops import rearrange

def simplified_self_attention(q, k, v):
    """
    A simplified self-attention mechanism.
    Args:
        q, k, v (torch.Tensor): Queries, Keys, and Values. Shape: [batch_size, num_tokens, feature_dim]
    Returns:
        torch.Tensor: The result of the attention mechanism.
    """
    # Compute the dot product between queries and keys
    scores = torch.matmul(q, k.transpose(-2, -1))
    
    # Apply softmax to get probabilities
    attn_weights = F.softmax(scores, dim=-1)
    
    # Multiply by values
    output = torch.matmul(attn_weights, v)
    return output
# Example tensors representing queries, keys, and values
batch_size, num_tokens, feature_dim = 10, 16, 64
q = torch.rand(batch_size, num_tokens, feature_dim)
k = torch.rand(batch_size, num_tokens, feature_dim)
v = torch.rand(batch_size, num_tokens, feature_dim)
# Apply self-attention
attention_output = simplified_self_attention(q, k, v)
print("Output shape:", attention_output.shape)

在此示例中,为简单起见,使用 torch.matmul 来计算点积。Einops 在这些操作之前或之后重新排列张量时特别有用,可确保它们在矩阵乘法等操作中正确对齐。

3.2 进一步利用 Einops

除了基本的重排、规约和重复之外,Einops 还可用于更复杂的张量操作,这在多头注意力中经常遇到,其中将特征维度拆分为多个“头”可以简洁地表达:

def multi_head_self_attention(q, k, v, num_heads=8):
    """
    Multi-head self-attention using Einops for splitting and merging heads.
    """
    batch_size, num_tokens, feature_dim = q.shape
    head_dim = feature_dim // num_heads
    
    # Split into multiple heads
    q, k, v = [
        rearrange(x, 'b t (h d) -> b h t d', h=num_heads)
        for x in (q, k, v)
    ]
    
    # Apply self-attention to each head
    output = simplified_self_attention(q, k, v)
    
    # Merge the heads back
    output = rearrange(output, 'b h t d -> b t (h d)')
    return output

# Apply multi-head self-attention
multi_head_attention_output = multi_head_self_attention(q, k, v)
print("Multi-head output shape:", multi_head_attention_output.shape)

此示例展示了 Einops 在轻松处理复杂张量重塑任务方面的强大功能,使您的代码更具可读性和可维护性。

4、结束语

Einops 是一种多功能且功能强大的张量操作工具,可以显著简化深度学习模型中复杂操作的实现。通过掌握 Einops,你将能够编写更简洁、可读和高效的张量操作代码,从而提升你的深度学习项目。无论是实现复杂的神经网络架构(如 Transformers)还是执行基本的张量重塑任务,Einops 都能满足你的需求。


原文链接:Einops 张量操作入门 - BimAnt

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTTP 415错误状态码

HTTP 415错误状态码是指"Unsupported Media Type"(不支持的媒体类型)。这通常发生在客户端向服务器发送请求时,请求中包含的媒体类型(例如Content-Type头部)不被服务器支持或识别的情况下。 解决方法&#…

Erpnext安装

Erpnext安装 环境要求 Ubuntu 23.04 x86_64 Python 3.10.12 pip 23.0.1 node v18.16.0 npm 9.5.1 yarn 1.22.22 MariaDB 10.11.2 Redis 7.0.8 wkhtmltox 0.12.6.1 bench 5.22.6环境安装 Reids 安装 // 安装7.0.8 也可不指定版本 直接执行 sudo apt install redis-server s…

XX集团网上客户管理系统投标书技术部分(358页WORD)

方案介绍:针对客户不断增加的便民查询,业务受理等实际需求,我们将积极整合国内外人才、技术、产品资源,打造XX最便捷的网上处理平台。在平台建设和运营基础上,持续探索各种创新模式,发展多种有针对性的衍生…

攻防演练“轻装上阵” | 亚信安全信舱ForCloud 打造全栈防护新策略

网络世界攻防实战中,攻击风险已经从代码到云横跨全栈技术点,你准备好了吗 云服务器,攻击众矢之的 2022年超过38万个Kubernetes API服务器暴露公网,成为攻击者目标。云服务器,尤其是开源设施,一直以来不仅是…

拐点 万维钢电子书(拐点万维钢下载在线阅读)

本文节选自《拐点万维钢》在线阅读 医院急诊室有个特别常见的状况是病人胸口痛。对这种情 况,医生必须判断是不是心脏病,是心脏病就得赶紧处置。但问题 是,急诊医生并没有很好的诊断方法。 通常的做法是搞个正式的检查,而心脏病检…

碳课堂 | 手把手教你申报CBAM

CBAM全称为 Carbon Border Adjustment Mechanism,也被称作“碳关税”或“碳边境调节机制”,是指在实施国内严格气候政策的基础上,要求进口或出口的高碳产品缴纳或退还相应的税费或碳配额。目前,由于欧盟碳边境调节机制是全球第一个…

示例:WPF中在没有MouseDoubleClick的控件中如何识别双击

一、目的&#xff1a;由于MouseDoubleClick控件是在Control中实现&#xff0c;那么在底层控件如Grid中想要类似功能如何实现&#xff0c;这里通过MouseDown的事MouseButtonEventArgs参数去实现 二、实现 定义Grid并注册Grid的MouseDown事件 <Grid Background"Transpa…

Ubuntu,Centos,Linux服务器安装Mellanox MCX653105A IB网卡HCA卡驱动

Mellanox 官方驱动下载地址 https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/ 选择对应操作系统 官方链接速度比较慢&#xff0c;推荐个友商的下载地址 https://support.xfusion.com/support/#/zh/rack-servers/2288h-v5-pid-21872244/software …

对 PLC AC 模块的 TRIAC 输出进行故障排除

在大多数离散 PLC 系统中&#xff0c;排除输出设备故障的过程相当简单。如果输出端正常工作&#xff0c;则在“关闭”时应测量 0 V&#xff0c;在“开启”时应测量满源电压。对于数字和继电器输出&#xff0c;情况确实如此。对于由 TRIAC 驱动的 AC 输出也应如此&#xff0c;但…

C++通过VS2022使用Conan2.0安装fmt库实现控制台彩色打印

Conan是一个开源的C/C包管理器&#xff0c;用于管理和构建C/C项目的依赖关系。它允许开发人员轻松地集成第三方库、工具和资源到他们的项目中&#xff0c;并管理这些依赖项的版本、构建选项和配置。 Conan官方提供了对应的VS2022扩展插件&#xff0c;通过这个插件再搭配VS2022…

如何正确操作工业高温烤箱

高温烤箱广泛应用于陶瓷、丝印、汽车配件、电子、机电、通讯、化工、器材、印刷、制药、工业、橡胶、油漆、食品之烘烤、水份干燥、预热等用途。那么要想工业高温烤箱在使用的过程中能够正常运行&#xff0c;那么正确的操作是必不可少的&#xff0c; 1、防止触电&#xff1a;高…

电脑文件防泄密软件——天锐绿盾 - 中科数安—— 哪个好

在选择电脑文件防泄密软件时&#xff0c;天锐绿盾和中科数安都是值得考虑的选项。以下是对这两款软件的详细比较&#xff1a; www.drhchina.com PC地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 功能全面性&#xff1a; 天锐…

具身智能的视觉-语言-动作模型综合综述论文

近期arXiv公开了关于具身智能&#xff08;Embodied AI&#xff09;中的视觉-语言-动作模型&#xff08;Vision-Language-Action Models&#xff0c;简称VLAs&#xff09;的综合综述论文。介绍了VLAs的概念&#xff0c;它们是为了处理多模态输入而设计的模型&#xff0c;包括视觉…

移动硬盘数据恢复,6个亲测有效方法公开!

“我的移动硬盘已经用了很久了&#xff0c;最近不知道是怎么回事&#xff0c;里面有部分重要的数据居然不见了。想问问大家有什么方法可以恢复移动硬盘的数据吗&#xff1f;” 在数字时代的浪潮中&#xff0c;移动硬盘已成为我们存储和携带数据的重要工具。从海量的工作文档、珍…

java 对象实际占用内存大小预估工具类ObjectSizeUtil

java 对象实际占用内存大小预估工具类 返回对象占用预估字节数 返回字节数对应格式化后的字符串&#xff08;xx Kb&#xff09; 使用效果 依赖了lombock和hutool&#xff0c;项目不用这个可以去掉日志&#xff0c;稍微改写一下。 import cn.hutool.core.util.ClassUtil; i…

Java同城信息付费系统家政服务房屋租赁房屋买卖房屋装修信息发布平台小程序APP公众号源码

&#x1f4f2;一站式便捷生活助手&#x1f680; &#x1f4cc;一、引言&#xff1a;同城信息付费服务系统的新篇章 在信息碎片化的时代&#xff0c;我们越来越需要一个集中、高效、便捷的平台来获取同城信息。同城信息付费服务系统发布平台小程序应运而生&#xff0c;它以其独…

CorelDRAW Graphics Suite下载2024最新版-CorelDRAW2024详细安装步骤

CorelDRAW​​ Graphics Suite官方版是款很多用户在工作中都会使用的矢量图形设计工具。CorelDRAW Graphics Suite正式版采用量身定制的界面和无与伦比的定制功能&#xff0c;畅享无缝设计经验。并且CorelDRAW Graphics Suite还可以广泛应用于商标设计、标志制作、模型绘制、插…

物理隔离后数据怎么导入和导出?安全U盘一键解决

政府单位、军工和科研所、航空航天企业、金融机构、医疗单位、电力企业、生物制药实验室等企业及单位&#xff0c;因研发和生产过程、或日常经营中涉及大量敏感信息和技术&#xff0c;需要通过物理隔离来确保网络的安全性。因此&#xff0c;多采用物理隔离的方式进行网络建设。…

Python xml.dom.minidom 读取XML元素

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 什么是 XML&#xff1f; XML&#xff08;可扩展标记语言&#xff09;是一种用于描述数据结构和交换数据的标记语言。它被广泛用于 Web 应用程序中&#xff0c;用于存储和传输数据。XML 具有自描述性&#xff0c;因此…

002.Linux CentOS7 安装

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…