更文明时代的优雅尺寸
torchsaber的Python项目详细描述
torchsaber: Elegant Dimensions for a more Civilized Age
It is a period of civil war. Rebel spaceships have won their first victory against the awesome
RuntimeError
(experimental support for Named Tensors in PyTorch).
动机
您多久编写或看到这样的代码?在
images=torch.randn(10,3,64,64)flipped=images.transpose(2,3)cropped=flipped[:,:,x:x+32,y:y+32]flatten=cropped.view(-1,32*32)gray=flatten.sum(dim=2)/3.
或者有个神秘的错误
^{pr2}$我不管你来自哪个宇宙,那会伤到你的眼睛。怎么办
所有这些数字意味着什么?最后尺寸的顺序是什么?是
dim=2
通道平均值的正确求和?谁知道呢?未命名
维度导致愤怒;愤怒导致缺陷;缺陷导致痛苦。在
但是,希望之光!Pythorch有
released
对命名张量的实验支持:即其维数为
有名字而不是简单的数字索引。这是个好消息,但是
还有一些粗糙的边缘。以你的名字为例
硬编码的字符串字面值无处不在;键入错误(例如'hieght'
)可能会破坏
以运行时未捕获的意外方式编写代码。在
torchsaber
是命名张量的最小语法糖。它的目标是
给你力量(无限力量!)允许所有尺寸操作
通过名称来完成,而不是通过数字索引或硬编码字符串文本。
维度及其操作是
first-class对象
该接口与Pythorch面向用户的API清晰地结合在一起。例如,上面的
代码段变成:
fromtorchsaberimportdimsbatch,channel,height,width,features=dims('batch','channel','height','width','features')images=torch.randn|batch(10)+channel(3)+height(64)+width(64)flipped=images.permute(~width,~height)cropped=flipped|height[:32]+width[:32]flatten=cropped.flatten([~height,~width],~features)gray=flatten.sum(dim=~channel)/3.
我所说的“最小”是指整个实现大约有100行代码。在
我能用一下吗?在
当然!最简单的学习方法是阅读顶部的大评论
torchsaber.py
。这是一个有文化的医生!然后pip install torch torchvision torchsaber
和{
然而,由于命名张量是实验性的,所以torchsaber也是。real 该项目的目标是引发一些关于人性化设计的讨论 为了将来的张量程序。在
(一些!)参考文献
这是一份以前工作的非详尽清单(其中许多都有自己的工作) 你可以参考的书目
- Tensors Considered Harmful和{a7},这导致PyTorch支持命名张量。在
- An older PyTorch named tensor proposal
- Typesafe Abstractions for Tensor Operations (SCALA 2017)
- 其他目标相似的项目: 在
More说,是吗?在
打开一个问题,提交一个公关,给我发电子邮件!在
- 项目
标签: