Tensorlayer团队的最新作品,跨平台开源框架TensorLayerX来了!

国内启智平台:TensorLayerX

或GitHub开源地址:GitHub - tensorlayer/TensorLayerX: TensorLayerX: A Unified Deep Learning and Reinforcement Learning Framework for All Hardwares, Backends and OS.

文档地址:Welcome to TensorLayerX

这个项目由北京大学、鹏城实验室、爱丁堡大学、帝国理工、清华、普林斯顿、斯坦福等机构的研究人员维护。

TensorLayerX是新一代的多后端深度学习框架,兼容TensorFlow、Pytorch、PaddlePaddle、MindSpore等国内外主流深度学习计算引擎作为计算后端,用户可以在各类操作系统和AI硬件上(如英伟达GPU 和 国产华为Ascend)使用相同的代码进行开发。

TensorLayerX是为了顺应深度学习跨平台开发的趋势而诞生的。如果你有以下需求,请选择TensorLayerX:

  • 使用统一的代码在多中框架环境开发深度学习应用
  • 使用国产AI框架和芯片,希望降低学习成本
  • 参与中国人为主的一线开发者社区

跨平台开发趋势

深度学习发展到2022年,呈现出计算框架、计算硬件、操作系统、应用种类的多样化趋势。在百花齐放、欣欣向荣的背后也存在着弊端:由于计算引擎众多、它们的接口差异化明显,而且不同厂家的计算引擎往往与特点的芯片绑定,造成开源生态的割裂。因此,跨平台、跨硬件的开发需求愈发强烈。

现在深度学习研究的主流框架包括TensorFlow、Pytorch和国内的PaddlePaddle、MindSpore等。

近年来,国内AI计算框架和芯片得到了很大的发展,这对我国人工智能进步起到了基础性的作用。包括百度的PaddlePaddle和华为的MindSpore在内的优秀国产计算框架都在蓬勃发展,百度昆仑、华为Ascend等优秀国产芯片国产AI芯片获得了更多的使用。

国外的TensorFlow和Pytorch框架的用户最多、生态最完善,大多数公布的新论文算法都是用这两个框架实现的。然而,这两个框架所代表的深度学习生态完全由欧美主导,优先支持的是英伟达GPU和谷歌TPU等计算设备,几乎不支持国内的计算设备和操作系统。

各位开发者可能都遇到过这样的困惑:为了运行几个开源算法,需要安装多个框架多个版本的环境、cuda等依赖库版本冲突,需要使用国产框架的时候学习成本高、生态资源少。总之,在开发深度学习应用的过程中,需要耗费很大的精力处理不同框架间的差异,而且国产计算硬件和框架的发展受到了很大的阻碍。

如今,行业内人工智能开发工具很多,很多开发者开始发现,这些工具的使用方法越来越像。工具随着行业的发展形成统一的规范,开发者们将更容易得到便利。

开发者们对一个跨平台、跨硬件、兼容多后端的开发工具的需求愈发强烈。

回顾:Tensorlayer和Keras高级API

2016 年,北京大学董豪教授在帝国理工读博期间,在 Github 上开源 TensorLayer1.0,Github上总Star项目超过1万次,TensorLayer开发框架下载量超过40万次,开源应用涉及计算机视觉和强化学习。

TensorLayer 是一款基于 TensorFlow 开发的深度学习与强化学习库。当时的TensorFlow的定位是“基于图的科学计算库”缺少用于深度学习的网络组件和高级API,TensorLayer提供了高级别的深度学习 API,非常易于修改和扩展,可以同时用于机器学习的研究与产品开发。

2015年,Keras——由Python编写的开源人工神经网络库发布了,它提供了一套深度学习模型的设计、调试、评估、应用的高级API,可以使用Tensorflow、Microsoft-CNTK和Theano作为计算后端。一直以来,Keras因为其便捷直观的接口和跨平台跨后端的特性,受到了广大开发者的欢迎。

但是在Google正式接管Keras以后,Keras基本上变成了TensorFlow的高级API模块,不再继续支持更多框架作为计算后端,导致市场上失去了跨平台跨框架开发的工具。

TensorLayer 最初的版本和 Keras 很相似,但 Keras 当时兼容多框架,而 TensorLayer 当初只支持 TensorFlow 一个框架。随着近几年国内的开发框架和 AI 芯片厂商的发展,不论从软件层还从芯片层的生态圈,都出现了割裂分散的形势。

基于这个背景,TensorLayer 团队希望打造一套通用的与平台无关的一种开发框架, 发布了的TensorLayer 升级版本 TensorLayer X

TensorLayerX 是一个兼容众多计算引擎的开发框架,目前兼容的引擎包括TensorFlow、Pytorch、PaddlePaddle、MindSpore等,基本具备了兼容国内外主流深度学习开发平台的跨平台开发能力,接下来就请随我详细了解一下TensorLayerX吧!

快速入门

千言万语的介绍,不如动手用几行代码体验TensorLayerX的便利性!

安装

TensorLayerX的安装非常简单,只需要一行pip命令,除了自动安装普通依赖库外,程序还会帮你检查并安装支持的后端框架!

pip3 install tensorlayerx#==0.5.2

比如程序检测到你的环境中已经安装了TensorFlow、Pytorch、PaddlePaddle、MindSpore框架之一,就不会额外下载后端框架。反之,如果你的环境没有安装任何后端框架,则会自动帮你下载后端框架库!

指定后端

TensorlayerX目前支持包括TensorFlow、Pytorch、PaddlePaddle、MindSpore作为计算后端,指定计算后端的方法也非常简单,只需要设置环境变量即可

import osos.environ['TL_BACKEND'] = 'tensorflow'# os.environ['TL_BACKEND'] = 'mindspore'# os.environ['TL_BACKEND'] = 'paddle'

除了在代码中使用os模块定义外,你也可以在运行程序前使用命令来指定

#Linuxexport TL_BACKEND= 'tensorflow'#Windowsset TL_BACKEND= 'tensorflow'

搭建模型

TensorLayerX在设计模型的搭建方式时,为了照顾开发者的习惯,尽可能的和主流的深度学习框架保持一致。

同时,作为特色,TensorLayerX提供了自动推断输入张量形状的功能,开发者不必再手动计算并指定in_channels和in_features参数了!

对于结构简单的、序列式的模型,你可以使用Sequential方式搭建,短短的几行代码即可完成一个模型的搭建

from tensorlayerx.nn import Sequential #序列式模型from tensorlayerx.nn import Linear #全连接层layer_list = [] #空的层列表#依次添加各层layer_list.append(Linear(out_features=800, act=tlx.ReLU, in_features=784, name='linear1'))layer_list.append(Linear(out_features=800, act=tlx.ReLU, in_features=800, name='linear2'))layer_list.append(Linear(out_features=10, act=tlx.ReLU, in_features=800, name='linear3'))MLP = Sequential(layer_list)

对于结构复杂的,需要自定义计算顺序的模型,你可以继承nn.Module类型来编写

from tensorlayerx.nn import Moduleimport tensorlayerx as tlxfrom tensorlayerx.nn import (Conv2d, Linear, Flatten, MaxPool2d, BatchNorm2d)class CNN(Module):def __init__(self):super(CNN, self).__init__()# weights initW_init = tlx.nn.initializers.truncated_normal(stddev=5e-2)W_init2 = tlx.nn.initializers.truncated_normal(stddev=0.04)b_init2 = tlx.nn.initializers.constant(value=0.1)self.conv1 = Conv2d(64, (5, 5), (1, 1), padding='SAME', W_init=W_init, b_init=None, name='conv1', in_channels=3)self.bn = BatchNorm2d(num_features=64, act=tlx.ReLU)self.maxpool1 = MaxPool2d((3, 3), (2, 2), padding='SAME', name='pool1')self.conv2 = Conv2d(64, (5, 5), (1, 1), padding='SAME', act=tlx.ReLU, W_init=W_init, b_init=None, name='conv2', in_channels=64)self.maxpool2 = MaxPool2d((3, 3), (2, 2), padding='SAME', name='pool2')self.flatten = Flatten(name='flatten')self.linear1 = Linear(384, act=tlx.ReLU, W_init=W_init2, b_init=b_init2, name='linear1relu', in_features=2304)self.linear2 = Linear(192, act=tlx.ReLU, W_init=W_init2, b_init=b_init2, name='linear2relu', in_features=384)self.linear3 = Linear(10, act=None, W_init=W_init2, name='output', in_features=192)def forward(self, x):z = self.conv1(x)z = self.bn(z)z = self.maxpool1(z)z = self.conv2(z)z = self.maxpool2(z)z = self.flatten(z)z = self.linear1(z)z = self.linear2(z)z = self.linear3(z)return z

数据加载

TensorLayerX提供了高效、简洁的数据加载及处理接口,你可以使用Dataset和DataLoader轻松地加载训练所用的数据

import tensorlayerx as tlxfrom tensorlayerx.dataflow import Dataset, DataLoaderfrom tensorlayerx.vision.transforms import (Compose, Resize, RandomFlipHorizontal, RandomContrast, RandomBrightness, StandardizePerImage, RandomCrop)X_train, y_train, X_test, y_test = tlx.files.load_cifar10_dataset(shape=(-1, 32, 32, 3), plotable=False)class cifar10_dataset(Dataset):def __init__(self, data, label, transforms):self.data = dataself.label = labelself.transforms = transformsdef __getitem__(self, idx):x = self.data[idx].astype('uint8')y = self.label[idx].astype('int64')x = self.transforms(x)return x, ydef __len__(self):return len(self.label)train_transforms = Compose([RandomCrop(size=[24, 24]),RandomFlipHorizontal(),RandomBrightness(brightness_factor=(0.5, 1.5)),RandomContrast(contrast_factor=(0.5, 1.5)),StandardizePerImage()])test_transforms = Compose([Resize(size=(24, 24)), StandardizePerImage()])train_dataset = cifar10_dataset(data=X_train, label=y_train, transforms=train_transforms)test_dataset = cifar10_dataset(data=X_test, label=y_test, transforms=test_transforms)train_dataset = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)test_dataset = DataLoader(test_dataset, batch_size=batch_size)

模型训练

TensorLayerX提供了两种训练方式,一种是高级封装的训练API,一种是用户自定义的按Step训练。

如果你希望尽快开始模型的训练,我们建议你使用高级封装的训练API,只需要几行代码就可以开始模型训练。

# 搭建网络net = CNN()# 设置训练参数batch_size = 128n_epoch = 500learning_rate = 0.0001print_freq = 5n_step_epoch = int(len(y_train) / batch_size)n_step = n_epoch * n_step_epochshuffle_buffer_size = 128# 定义损失函数、优化器等optimizer = tlx.optimizers.Adam(learning_rate)metrics = tlx.metrics.Accuracy()loss_fn = tlx.losses.softmax_cross_entropy_with_logits#使用高级API构建可训练模型net_with_train = tlx.model.Model(network=net, loss_fn=loss_fn, optimizer=optimizer, metrics=metrics)#执行训练net_with_train.train(n_epoch=n_epoch, train_dataset=train_loader, print_freq=print_freq, print_train_batch=False)如果你希望细粒度的控制训练工程,那么可以使用TrainOneStep的方式class WithLoss(Module):def __init__(self, net, loss_fn):super(WithLoss, self).__init__()self._net = netself._loss_fn = loss_fndef forward(self, data, label):out = self._net(data)loss = self._loss_fn(out, label)return lossnet_with_loss = WithLoss(net, loss_fn=tlx.losses.softmax_cross_entropy_with_logits)net_with_train = TrainOneStep(net_with_loss, optimizer, train_weights)for epoch in range(n_epoch):start_time = time.time()net.set_train()train_loss, train_acc, n_iter = 0, 0, 0for X_batch, y_batch in train_dataset:_loss_ce = net_with_train(X_batch, y_batch)train_loss += _loss_cen_iter += 1_logits = net(X_batch)metrics.update(_logits, y_batch)train_acc += metrics.result()metrics.reset()print("Epoch {} of {} took {}".format(epoch + 1, n_epoch, time.time() - start_time))print("   train loss: {}".format(train_loss / n_iter))print("   train acc:  {}".format(train_acc / n_iter))

TensorLayerx介绍

TensorLayerX特色

TensorLayerX是一套跨平台的深度学习开发工具,它使用纯Python代码开发。通过对多后端的Python接口进行封装,TensorLayerX提供了一套兼容多个框架的深度学习开发统一API,再由各后端框架的底层程序负责调用硬件计算,使得开发者可以无视后端框架和硬件平台地进行深度学习开发。在这个过程中,几乎没有计算性能的损耗。

TensorLayerX的开发范式是面向对象的,所有的层和模型的定义都通过继承并改写nn.Module类型。

TensorLayerX的底层,是对于各个后端框架的基础张量操作进行的包装tlx.ops,在此基础上通过改写 nn.Module类型,TensorLayerX封装了许多常用的神经网络层、模块,开发者可以轻松地编写自己的算法。

同时,TensorLayerX在设计时考虑了简洁的训练过程和定制化的训练过程。用户既可以使用封装的model.train()方法一键开始模型训练,也可以使用循环的方式精确控制每个Step的训练过程。

TensorLayerx生态

TensorLayerX不只是一个框架,而是一系列开源产品、开源社区、开源活动组成的深度学习开源平台,从多方面构成了TensorLayerX的开源生态。我们为构建并完善这个国产深度学习生态的工作,命名为“腾龙开源计划”

TLXZOO算法库

TLXZoo算法库,是基于TensorLayerX开发的常用算法库,方便开发者复用。其中的算法涵盖计算机视觉、自然语言处理等领域各类常用神经网络算法。同时,会及时复现学术界最新的算法。

目前支持的算法包括:

  • NLP:
  • 文本分类:T5、BERT
  • 实体标注:T5、BERT
  • 文本翻译:T5
  • 文本推理(NLI):T5
  • 语音:
  • 语音识别:wav2vec
  • CV:
  • 图像分类:ResNet、VGG
  • 目标检测:Detr、YOLO
  • 语义分割:Unet
  • OCR识别:trocr
  • 人脸识别:retinaface+Arcface
  • 人体姿态估计 HRNet

当前的深度学习算法生态,是一个经典学术算法—最新学术算法—工业落地的生态闭环

我们希望TLXZOO算法,可以为整个生态带来帮助

  • 对于学术研究者,可以方便的找到相关领域的最新模型,进行学习和对比;
  • 对于工业界开发者,可以灵活的使用模型库内的预训练模型作为核心模块,进行部署或进一步训练。
  • 鼓励学术研究者使用TensorLayerX框架开源自己的新算法代码,惠及整个生态的研究者、开发者

RLZOO强化学习工具箱

RLzoo 是最实用的强化学习算法、框架和应用程序的集合。它使用 Tensorflow 2.0 和TensorLayerX中的神经网络层 API 实现,为强化学习实践和基准测试提供动手快速开发的方法。它支持基本的toy测试,如OpenAI Gym和DeepMind Control Suite,配置非常简单。此外,RLzoo 支持基于Vrep/Pyrep模拟器的机器人学习基准环境RLBench 。

同时,你也可以结合我们的配套教材深度强化学习:基础、研究与应用 进行理论+实践的学习。

开发者社区

一个活跃的开发者社区对开源软件的发展至关重要。

TensorLayerX将持续的建设中国人为主的深度学习开发者社区,包括线上交流群组、举办比赛、线下沙龙(视疫情情况),以及和高校师生的合作等。

目前国内开源社区面临参与贡献国外框架难、大企业非开放式开源、普遍只借鉴不贡献等问题,我们希望在开发TensorLayerX这一国产开源项目的过程中,能够与更多的开源贡献者一起成长,成为中国开源界的一支生力军。

前景展望

TensorLayerX目前处于刚刚发布的阶段,还有很多的功能正在改进完善,更多的模块和生态产品也在开发当中。

即将开发完成的包括:

  • 多种硬件的分布式训练
  • TLX2ONNX,实现了TensorLayerX模型转换为onnx模型,最大程度上和主流深度学习生态接轨。
  • OpenIVA,一个端到端的基于多推理后端的智能视觉分析开发套件,旨在帮助个人用户和初创企业快速部署启动自己的视觉AI服务。支持TensorLayerX/TensorRT/onnxruntime等多推理后端。

加入我们

TensorLayerX刚刚发布,羽翼未丰,迫切的需要广大开发者提供宝贵的意见,也欢迎各位开源贡献者参与,一起打造中国人主导的深度学习生态社区!

您可以加入我们的微信群进行日常的问题解答/交流: liuyiliang100(个人v,加好友拉群)

可以通过Star 启智社区仓库、GitHub仓库来跟踪最新进展,参与开源软件开发。

如果您有关于开源软件、学术合作方面的意向,请联系董豪老师邮箱hao.dong@pku.edu.cn

多后端深度学习开发框架TensorlayerX发布相关推荐

  1. 撒花!斯坦福深度学习最新视频发布,吴恩达主讲!

    点击上方"AI有道",选择"置顶"公众号 重磅干货,第一时间送达 就在 3 月 21 日,由吴恩达开设的斯坦福深度学习课程 CS230 课程视频发布到了网上.视 ...

  2. 【深度学习】上海交大发布 MedMNIST 医学图像分析数据集 新基准

    By 超神经 内容概要:医学图像分析是一个非常复杂的跨学科领域,近日上海交通大学发布了 MedMNIST 数据集,有望促进医学图像分析的发展. 关键词:医学图像分析   公开数据集  令人头秃的医学图 ...

  3. Python 深度学习库 Keras 发布官方中文文档,这里有你需要了解的一切

    今年1月,Keras作者.谷歌AI研究员François Chollet在推特上发出召唤:讲中文的Keras用户们,是否有人愿意帮忙一起搞个Keras文档的中文版? 一个多月后,官方中文文档来了. K ...

  4. 【经典课程】图灵奖得主LeCun亲授,深度学习课程在线发布

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要5分钟 Follow小博主,每天更新前沿干货 深度学习作为AI入门的一门必修课程,在网上一直有着许多教学资源. 最常见的莫过于吴恩达老师的&l ...

  5. 图灵奖得主LeCun亲授,深度学习课程在线发布|资源

    木易 发自 凹非寺  量子位 报道 | 公众号 QbitAI 深度学习作为AI入门的一门必修课程,在网上一直有着许多教学资源. 最常见的莫过于吴恩达老师的<深度学习>课程. 就在前不久,纽 ...

  6. 《DeepLearning.ai 深度学习笔记》发布,黄海广博士整理

    深度学习入门首推课程就是吴恩达的深度学习专项课程系列的 5 门课.该专项课程最大的特色就是内容全面.通俗易懂并配备了丰富的实战项目.今天,给大家推荐一份关于该专项课程的核心笔记!这份笔记只能用两个字形 ...

  7. 深度学习-基础镜像发布系列

    前期准备-安装 docker Ubuntu Docker 安装--深度学习环境预备_Eddy_zheng的博客-CSDN博客 1.pytorch 基础镜像-torch-1.10.0-cuda11.3- ...

  8. 深度学习和Keras 简介

    随着近年来人工智能(AI)技术的大热,相信读者们对"人工智能""机器学习" 和"深度学习"这几个词汇已经耳熟能详.那么,这三者之间是什么关系 ...

  9. 深度学习调用TensorFlow、PyTorch等框架

    深度学习调用TensorFlow.PyTorch等框架 一.开发目标目标 提供统一接口的库,它可以从C++和Python中的多个框架中运行深度学习模型.欧米诺使研究人员能够在自己选择的框架内轻松建立模 ...

  10. 深度学习框架不能“包治百病”,开发者如何选出最适合自己的?

    随着深度学习关注度和势头上升,深度学习被越来越多的企业和组织的生产实践结合起来.这时,无论是对于深度学习相关专业的初学者,还是已经在企业和组织中从事工业场景应用和研发的开发者来说,选择一个适合自己,适 ...

最新文章

  1. ibm刀片服务器虚拟化,IBM POWER刀片服务器的虚拟化解决方案v1.3.ppt
  2. 「NLP」 深度学习NLP开篇-循环神经网络(RNN)
  3. .NET版本与CLR版本及兼容性
  4. PIC单片机 按键检测识别
  5. UNICODE与UTF-8的转换
  6. 四十三、Stata界面,数据集入门篇
  7. 福布斯评科技未来五大趋势:电脑消失融入生活时间
  8. mysql权限层级体系_MySQL权限体系介绍
  9. 转载 JDK + Android-SDK + Python + MonkeyRunner 的安装
  10. Elasticsearch之中文分词器插件es-ik(博主推荐)
  11. SARIF在应用过程中对深层次需求的实现
  12. DataStorage分析
  13. Docker : Error response from daemon: Get https://docker.elastic.co/v2/: net/http: TLS handshake time
  14. RTX——第10章 任务调度-抢占式、时间片和合作式
  15. 物联网开发- Arduino 101/Genuino 101
  16. [转]sql server 2005 中的内连接和外连接
  17. java语句快捷键_Java中快捷键
  18. 【MV-3D】----多视图的3D目标检测网络
  19. 课工场论坛列表发帖制作
  20. 高德地图api的自定义地点标注

热门文章

  1. 微信小程序云开发问题篇3_云数据库导入Excel数据(xls转为json导入之后报错:导入数据库失败, Error: Poll error, 导入数据任务(id:1431654)异常...)
  2. 我变了?“我”没变!
  3. 【译】基于 Rust 用 Bevy 实现节奏大师游戏
  4. 这两天火爆全网的「蚂蚁呀嘿」App,被下架了...
  5. lingo纳什均衡代码_传统的战略式博弈求解纳什均衡方法——虚拟博弈(Fictitious Play)讲解及其代码...
  6. (73)C#里怎么样调用WIN API的函数时传送结构或指针对象
  7. 穿越沙漠matlab,中国五大经典沙漠穿越
  8. MySQL Join 优化
  9. 用css做一个梦幻西游动画特效
  10. 利用sklearn.cluster实现k均值聚类