【深度学习】Ivy 开源框架,深度学习大一统时代到来?
它來了,它帶著統(tǒng)一主流深度學(xué)習(xí)框架的接口來了。最近,有一個(gè)開源的框架:IVY,它將幾個(gè)主流的深度學(xué)習(xí)框架都做了一個(gè)統(tǒng)一的封裝,包括 PyTorch、TensorFlow、MXNet、Jax 和 Numpy。下面來大致看一下這個(gè)框架吧。
近兩年來,學(xué)術(shù)界和工業(yè)界一直在爭(zhēng)論 PyTorch 和 TensorFlow 哪一個(gè)才是最好用的深度學(xué)習(xí)框架。除了這兩個(gè)框架,谷歌出品的 Jax 也有起勢(shì)的樣子,還有亞馬遜的 MXNet,都還在發(fā)展。PyTorch 在學(xué)術(shù)界最火,TensorFlow 工程上部署的較多,可謂各有千秋。所以,就有開源作者想把各種主流的框架統(tǒng)一做了封裝,于是就有了 Ivy。
代碼地址:https://github.com/unifyai/ivy
先看看 IVY 官方是怎么定義的吧。
Ivy?is?a?unified?machine?learning?framework?which?maximizes?the?portability?of?machine?learning?codebases.?Ivy?wraps?the?functional?APIs?of?existing?frameworks.?Framework-agnostic?functions,?libraries?and?layers?can?then?be?written?using?Ivy,?with?simultaneous?support?for?all?frameworks.?Ivy?currently?supports?Jax,?TensorFlow,?PyTorch,?MXNet?and?Numpy.?
翻譯出來就是:
Ivy 是一個(gè)統(tǒng)一的機(jī)器學(xué)習(xí)框架,可最大限度地提高機(jī)器學(xué)習(xí)代碼庫的可移植性。Ivy 封裝了現(xiàn)有框架的功能 API。然后可以使用 Ivy 編寫與框架無關(guān)的函數(shù)、庫和層,它可以同時(shí)支持所有框架。Ivy 目前支持 Jax、TensorFlow、PyTorch、MXNet 和 Numpy。
目前官方已經(jīng)發(fā)布了不少 Ivy 編寫的派生庫,包括力學(xué)、3D 視覺、機(jī)器人、增強(qiáng)學(xué)習(xí)、神經(jīng)記憶、預(yù)訓(xùn)練模型以及實(shí)現(xiàn),此外還有訓(xùn)練、數(shù)據(jù)加載的構(gòu)建器工具等。
快速入門
我們可以直接 pip install ivy-core來安裝,然后你可以使用你喜歡的框架來訓(xùn)練一個(gè)模型,下面是一個(gè)示例:
import?ivyclass?MyModel(ivy.Module):def?__init__(self):self.linear0?=?ivy.Linear(3,?64)self.linear1?=?ivy.Linear(64,?1)ivy.Module.__init__(self)def?_forward(self,?x):x?=?ivy.relu(self.linear0(x))return?ivy.sigmoid(self.linear1(x))ivy.set_framework('torch')??#?change?to?any?framework! model?=?MyModel() optimizer?=?ivy.Adam(1e-4) x_in?=?ivy.array([1.,?2.,?3.]) target?=?ivy.array([0.])def?loss_fn(v):out?=?model(x_in,?v=v)return?ivy.reduce_mean((out?-?target)**2)[0]for?step?in?range(100):loss,?grads?=?ivy.execute_with_gradients(loss_fn,?model.v)model.v?=?optimizer.step(model.v,?grads)print('step?{}?loss?{}'.format(step,?ivy.to_numpy(loss).item()))print('Finished?training!')這個(gè)示例使用 PyTorch 作為后端框架,但后端可以輕松更改為你喜歡的框架,例如 TensorFlow、JAX 或 MXNet。
框架無關(guān)的函數(shù)
Ivy 的函數(shù)可以接受所有框架的 tensor,如下面的例子:
import?jax.numpy?as?jnp import?tensorflow?as?tf import?numpy?as?np import?mxnet?as?mx import?torchimport?ivyjax_concatted?=?ivy.concatenate((jnp.ones((1,)),?jnp.ones((1,))),?-1) tf_concatted?=?ivy.concatenate((tf.ones((1,)),?tf.ones((1,))),?-1) np_concatted?=?ivy.concatenate((np.ones((1,)),?np.ones((1,))),?-1) mx_concatted?=?ivy.concatenate((mx.nd.ones((1,)),?mx.nd.ones((1,))),?-1) torch_concatted?=?ivy.concatenate((torch.ones((1,)),?torch.ones((1,))),?-1)下面是 Ivy 支持的函數(shù),可以看到,跟 Numpy、PyTorch、TensorFlow 的函數(shù)非常像
統(tǒng)一所有框架的目的何在?
很多開發(fā)者都想用一個(gè)框架開發(fā),那么 Ivy 有啥用呢?
當(dāng)你想讓代碼可用性最強(qiáng)的時(shí)候,Ivy的威力就顯現(xiàn)了。
當(dāng)我們想寫一些代碼,然后讓社區(qū)所有開發(fā)者都可以用,不管他們用的是啥框架,TF、PyTorch、MXNet、Jax,都沒關(guān)系。例如一個(gè)簡(jiǎn)單的裁剪函數(shù) ivy.clip,它很好的封裝了其他框架的函數(shù)。
就其本身而言,這似乎不是很有意思,在機(jī)器學(xué)習(xí)中還有比裁剪張量更有趣的事情。Ivy 可以構(gòu)建更多有趣的應(yīng)用。
Ivy 官方發(fā)布的力學(xué)、3D 視覺、機(jī)器人和可微分環(huán)境的代碼庫都是用純 Ivy 編寫的。這些庫為任何機(jī)器學(xué)習(xí)框架的用戶提供了各種應(yīng)用功能的完全可區(qū)分的實(shí)現(xiàn),隨時(shí)可以集成到用戶的代碼中。
Ivy 的另一個(gè)好處是靈活性。通過保持 Ivy 抽象的輕量級(jí),以及齊全的功能,這使您可以完全控制您的代碼。下面的示意圖強(qiáng)調(diào)您可以選擇在任何抽象級(jí)別進(jìn)行開發(fā)。
你可以完全在 Ivy 中編寫代碼,或者在原生 DL 框架中使用少量 Ivy 代碼。這完全取決于您需要從現(xiàn)有 Ivy 庫中獲得多少 Ivy 函數(shù)。
總得來說,Ivy 看著還挺有意思的。雖然我們當(dāng)前可能用不上它,但是可以觀察一下它的發(fā)展,說不準(zhǔn)未來會(huì)有機(jī)會(huì)使用它,讓我們靜觀其變吧~
點(diǎn)擊“閱讀原文”,直通公開課。
總結(jié)
以上是生活随笔為你收集整理的【深度学习】Ivy 开源框架,深度学习大一统时代到来?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【深度学习】PyTorch 中的线性回归
- 下一篇: 不确定下钻数的循环(部门下所属部门 多层