5行代码秀碾压,比Keras还好用的fastai来了,尝鲜PyTorch 1.0必备伴侣

休假栗 问耕 假装发自 凹非寺
量子位 出品 | 公众号 QbitAI

640?wx_fmt=png

PyTorch 1.0来了~

在今天的F8(Facebook开发者大会)上,深度学习框架PyTorch 1.0 rc1版如期发布。然而在海外的论坛上,另一个开源库的关注度不遑多让。

它就是fastai 1.0

简单来说,fastai只要一个API,就包含了所有常见的深度学习应用。堪称实用版的“要你命3000”。而且许多性能指标,已经超越了Keras。

比如,5行代码完成Keras用31行才能解决的事情。同时,误差表现也更好。难怪在Hacker News上,fastai的关注度比PyTorch 1.0还高……

而且fastai基于PyTorch 1.0框架,也被Facebook官方重点宣传。这两个全新的框架同时下载配合使用,疗效更佳。

这个悠长假期,你不试试么?

fastai 1.0

fastai的出品方是fast.ai,机构规模不大,但因为提供大量免费机器学习课程,而名声在外。还有,fast.ai也是美国军方的合作伙伴,研究如何加速人工智能技术的发展。

只要一个API

据创始人Jeremy Howard介绍,fastai只要一个API,就包含了几乎所有常见的深度学习应用。

用从前的库,都需要给不同的应用调取相应的API,fastai是第一个用单个API就能支持各类应用的库。

这样一来,用户就不需要记得五花八门的API调用方法了。用fastai搭建过视觉模型之后,可以用同一个的API再去搭建自然语言处理模型了。

在1.0发布之前,fastai最初的版本在9月上线,一波早期用户已经先行探索过这个年幼的库,并有多位大佬表示好用:

640?wx_fmt=png

这是Kaggle资深玩家Miguel Pérez Michaus,用fastai做的风格迁移成果。

作为一个“没有正式计算机背景”的程序猿,他毫不吝惜自己对fastai灵活性的赞美:连我都能用。

640?wx_fmt=png

GitHub的机器学习科学家Hamel Husain也用这个库,做了一个GitHub语义代码的搜索工具,还是半路从TensorFlow Hub换成fastai的。现在,搜索工具已经上线了:

https://experiments.github.com/semantic-code-search

还有,OpenAI小姐姐Christine Payne,最近做的一个项目叫Clara,是用神经网络生成音乐的AI。小姐姐说,如果没有fastai的话,速度就得不到保障了。

听一下Clara的作品,很美:

更多音乐:

http://christinemcleavey.com/clara-a-neural-net-music-generator/

5行代码就够了

Howard说,团队做过的研究,都嵌在这个框架里了。所以,大家可以充分享受这些成果。

他用猫狗识别的来举栗,那是迁移学习的经典案例,也是fast.ai的课程里最受欢迎的章节之一。

在新的库诞生之前,这样的问题大多是在TensorFlow上面用Keras解决的。如今,Keras依然是fast.ai团队仰慕的对象。

所以,团队也想在猫狗大战里感受一下,自家的框架和Keras对比起来,竞争力究竟如何。

1data = data_from_imagefolder(Path('data/dogscats'),
2    ds_tfms=get_transforms(), tfms=imagenet_norm, size=224)
3learn = ConvLearner(data, tvm.resnet34, metrics=accuracy)
4learn.fit_one_cycle(6)
5learn.unfreeze()
6learn.fit_one_cycle(4, slice(1e-5,3e-4))

这5行代码,就是在fastai框架里做ResNet50的two-stage微调,需要的全部操作了。

而同样的任务,Keras要用31行才能完成。

640?wx_fmt=png

除了代码行数,fastai在两个阶段的误差也比Keras更小

虽然成绩表十分骄人,Howard依然三番五次地表示,Keras始终是大神,整个团队都是Keras的粉丝。

先去用用看?

现在,fastai框架已经在GitHub上线了。下载请至:

https://github.com/fastai/fastai

也可以在谷歌云平台上用啊。先打开这个页面:

https://cloud.google.com/deep-learning-vm/docs/images

然后,给你的示例安装配置,再把fastai部署在PyTorch 1.0上。有了。

如果要在GPU驱动的Jupyter Notebook上运行fastai,也没问题:

https://salamander.ai/

除此之外,还有一个好消息。不久就会支持AWS了,可以期待一下。

640?wx_fmt=png

PyTorch 1.0

接下来,说说也是最新发布的PyTorch 1.0。

去年1月,PyTorch首次发布,目前下载已经超过100万次。今年五月,Facebook副总裁贾扬清和CTO Mike Schroepfer透露,PyTorch 1.0即将推出。当时,Caffe2代码还并入了PyTorch。

PyTorch 1.0 rc1版传送门:

https://github.com/pytorch/pytorch/releases

Facebook在官方博客中,还对PyTorch 1.0 rc1版进行了详细的介绍。

新框架有了一个全新的混合模式前端,支持tracing和scripting模型,从eager模式进入graph模式,从而弥合研发与生产部署之间的差距;一个经过改进的torch.distributed库,能让Python和C++环境中的训练更快。

以及这个版本正式融合了PyTorch框架的灵活性与Caffe2的生产力。贾扬清此前给的总结就是:Caffe2 + PyTorch = PyTorch 1.0。

三大新功能

torch.jit

JIT是一组编译工具,用于弥合PyTorch研究和生产之前的差距。其中包含一种名为Torch Script的语言(仍然使用Python编写),还有两种方法可以使现有的代码与JIT兼容。

Torch Script代码可以积极优化,并且在序列化之后可以在新的C++ API中使用,这就完全不依赖Python了。

c10d库

torch.distributed软件包以及torch.nn.parallel.DistributedDataParallel模块,由新的c10d库提供支持。主要亮点包括:

  • c10d是性能来驱动的,并且对所有后端完全异步操作

  • 分布式数据并行性能显著改进

  • 在Gloomy后端增加send和recv支持

C++前端API

这个前端API被明确标记为还不稳定(Unstable)。官方预计将在未来一两个月稳定下来,同时不排除发生其中某些部分发生重大变化。

这个C++前端是一个纯C++接口后端是PyTorch,与此前的Python前后端体系结构一样。这个API只在实现高性能、低延迟和裸机C++应用程序的研究。

以下是两种语言前端的简单比较。

640?wx_fmt=png

640?wx_fmt=png

其他

生态系统

Google云、亚马逊AWS、微软Azure Machine Learning等国外的流行云服务,现在与PyTorch更加兼容。

Arm、Nvidia、高通、英特尔、IBM等厂商的,也增加了对PyTorch 1.0的支持。确保PyTorch可以在数据中心、边缘硬件等不同领域得到应用。

根据官方消息,目前Google和Facebook正在合作,为PyTorch用户构建TPU。Google云的Deep Learning VM服务,也将提供PyTorch 1.0映像。

教育培训

Facebook透露正与Udacity合作,为开发者提供免费的深度学习入门课程,这些课程都基于PyTorch。此外,Facebook还将赞助300名开发者,完成Udacity的中级课程,这些课程也已经改为基于PyTorch 1.0。

当然,fast.ai的新课程和深度学习库,也是PyTorch在教育领域的合作成果。

加入社群

量子位AI社群28群开始招募啦,欢迎对AI感兴趣的同学,在量子位公众号(QbitAI)对话界面回复关键字“交流群”,获取入群方式;


此外,量子位专业细分群(自动驾驶、CV、NLP、机器学习等)正在招募,面向正在从事相关领域的工程师及研究人员。


进专业群请在量子位公众号(QbitAI)对话界面回复关键字“专业群”,获取入群方式。(专业群审核较严,敬请谅解)

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

640?wx_fmt=jpeg

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch模型转换为Keras模型代码是一项比较复杂的任务,因为PyTorchKeras在实现上有很大的不同。不过,可以通过以下步骤尝试进转换: 1. 安装onnx和onnx-tf 首先,需要安装onnx和onnx-tf。onnx是一种跨平台的开放式格式,用于表示深度学习模型。onnx-tf是一个用于将onnx模型转换为TensorFlow模型的工具。 ``` pip install onnx onnx-tf ``` 2. 将PyTorch模型转换为onnx模型 使用PyTorch将模型保存为ONNX格式: ```python import torch import onnx # 加载PyTorch模型 model = torch.load('model.pth') # 转换为ONNX格式 dummy_input = torch.randn(1, 3, 224, 224) input_names = ['input'] output_names = ['output'] onnx.export(model, dummy_input, 'model.onnx', input_names=input_names, output_names=output_names) ``` 3. 将onnx模型转换为Keras模型 使用onnx-tf将onnx模型转换为Keras模型: ```python import onnx import onnx_tf import tensorflow as tf from tensorflow import keras # 加载ONNX模型 model = onnx.load('model.onnx') # 转换为Keras模型 tf_rep = onnx_tf.backend.prepare(model) graph_def = tf_rep.graph.as_graph_def() input_names = [i.name for i in tf_rep.inputs] output_names = [i.name for i in tf_rep.outputs] with tf.Graph().as_default() as graph: tf.import_graph_def(graph_def, name='') sess = tf.compat.v1.Session(graph=graph) keras_model = keras.models.Sequential() keras_model.add(keras.layers.Lambda(lambda x: x, input_shape=(None,) + input_shape)) for layer in sess.graph.get_operations(): layer_type = layer.type layer_name = layer.name layer_input_shape = layer.inputs[0].get_shape().as_list() layer_output_shape = layer.outputs[0].get_shape().as_list() if layer_type == 'Placeholder': continue elif layer_type == 'Conv2D': filters = layer.inputs[1].get_shape().as_list()[3] kernel_size = layer.inputs[1].get_shape().as_list()[0] strides = layer.get_attr('strides')[1] padding = layer.get_attr('padding').decode() keras_layer = keras.layers.Conv2D(filters=filters, kernel_size=kernel_size, strides=strides, padding=padding, name=layer_name) elif layer_type == 'MaxPool': pool_size = layer.get_attr('kernel_shape')[1] strides = layer.get_attr('strides')[1] padding = layer.get_attr('padding').decode() keras_layer = keras.layers.MaxPooling2D(pool_size=pool_size, strides=strides, padding=padding, name=layer_name) elif layer_type == 'Relu': keras_layer = keras.layers.Activation('relu', name=layer_name) elif layer_type == 'Reshape': target_shape = layer.outputs[0].get_shape().as_list()[1:] keras_layer = keras.layers.Reshape(target_shape, name=layer_name) else: raise ValueError('Unsupported layer type: {}'.format(layer_type)) keras_layer.build(layer_input_shape) keras_layer.set_weights(sess.run(layer.inputs[1:])) keras_model.add(keras_layer) keras_model.summary() ``` 以上是将PyTorch模型转换为Keras模型代码的基本步骤。但是,由于两种框架的实现有所不同,因此在实际应用中可能需要进更深入的调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值