人走茶凉|API统一、干净,新型EagerPy实现多框架无缝衔接( 三 )
无论是哪种原生张量 , 通常都可以使用 ep.astensor 将它转换为适当的 EagerPy 张量 。 在此步骤中 , 通过使用正确的 EagerPy 张量类来自动封装原生张量 。 此外 , 最初的原生张量通常可以利用. raw 属性实现访问 。 完整示例如下代码 6 所示:
EagerPy 和原生张量之间的转换 。
在函数中通常将所有输入转换为 EagerPy 张量 。 这可以通过单独调用 ep.astensor 完成 , 但在使用 ep.astensors 时 , 代码可以更加简洁 , 如下:
实现框架无关的通用函数
通过上文中的转换函数 , 我们可以定义一个简单的框架无关函数 , 如下代码 8 所示:
代码 8:一个简单的框架无关范数函数 。
如下代码 9 所示 , 通过一个 PyTorch 张量来调用范数函数:
如下代码 10 所示 , 通过一个 TensorFlow 张量来调用范数函数:
此外 , 还需要注意一点 , 如果如上代码 8 所示使用 EagerPy 张量来调用函数 , 则 ep.astensor 调用只会返回它的输入 。 但是 , 最后一行代码中的 result.raw 调用依然会提取底层原生张量 。 通常而言 , 实现的通用函数最好可以透明地操控任何原生张量和 EagerPy 张量 , 也就是说返回类型应该总是与输入类型相匹配 。
这在 Foolbox 等库中非常有用 , 可以使用户同时处理 EagerPy 和原生张量 。
为此 , EagerPy 提供上述转换函数的两种派生函数 , 分别是 ep.astensor_和 ep.astensors_ , 它们可以返回一个能够恢复输入类型的反转函数 。
如果 astensor_的输入是一个原生张量 , 则 restore_type 等同于. raw;而如果原输入是一个 EagerPy 张量 , 则 restore_type 将不会调用. raw 。 因此 , 我们可以编写对任何输入都透明的改进版框架无关通用函数 , 如下代码 11 所示:
【人走茶凉|API统一、干净,新型EagerPy实现多框架无缝衔接】最后 , 如下代码 12 所示 , 使用 ep.astensors_来转换和恢复多个输入:
- 无话不谈|卧槽!我随便写的一个API竟获得 2.5 亿的访问量
- 昆山|昆山电子厂扔证后员工离职:3000人走2900个,生产线直接瘫痪!
- 员工|生产线直接瘫痪!,昆山电子厂扔证后员工离职:3000人走2900个
- 人走茶凉|乞丐身子皇帝用料!华硕Z490仅1200元碾压10代处理器
- 人走茶凉|南开史学 | 连续4天!B站直播!
- 人走茶凉|华为Mate40四款型号曝光,配置将比iPhone12强大
- 人走茶凉|“一加只做旗舰”?是个笑话?外媒消息称,一加将推入门手机
- 人走茶凉|集智攻关 之江实验室以体制机制创新推进“高原造峰”
- 人走茶凉|终于!微信语音突破60s,发送长语音还不限时长,这次良心了
- 人走茶凉|快递催生下的行业,你看不起的职业其实很暴利