Einops矩阵操作语法随记

  参考资料:

  https://einops.rocks/1-einops-basics/

  这篇随笔主要记录使用Einops这个矩阵操作的库的时候发现的,值得记录的高频或者重要的操作:

  既然网上的教程已经很详尽了,为什么还要这样做?因为遇见一次的情况很有可能下次还会遇到,主要是写给自己看,方便以后查阅。

  1. rearrange / unsqueeze

  添加新维度

x = rearrange(ims, 'b h w c -> b 1 h w 1 c') # functionality of numpy.expand_dims
print(x.shape)
print(rearrange(x, 'b 1 h w 1 c -> b h w c').shape) # functionality of numpy.squeeze

  2. repeat / expand

  元素/维度的重复。读者可能会疑惑,为什么einops中的repeat和pytorch中的expand而不是repeat相对应。根据https://github.com/arogozhnikov/einops/issues/202这个帖子的内容,einops把repeat和pytorch中的expand对应实际上是社区的需求。

  这里解释一下pytorch中的expand和repeat,expand仅仅创建一个view,也就是说创建出的那个tensor和原始的Tensor是共享内存的,你拿到的仅仅是一个“视图”(View)。而torch中的repeat操作则是实打实的进行复制。视图可以防止显存或者内存的浪费,但是如果你希望这些参数是可训练的参数的话还是老老实实地进行repeat吧。

# repeat along a new axis. New axis can be placed anywhere
repeat(ims[0], 'h w c -> h new_axis w c', new_axis=5).shape

 

posted @   思念殇千寻  阅读(148)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示