文档章节

2019谷歌开发者大会(GDD)参会心得

中年老俞
 中年老俞
发布于 09/11 22:30
字数 3653
阅读 3
收藏 0

Day1

首先来到的是主会场的本次大会开幕主旨演讲,带来了本次大会的重点:grow with google成长计划、Android 10、firebase、 flutter1.9、wear OS、ARCore等等,以及明天会花整整一天的重头:tensorflow专场。

想听的东西很多,但是由于分了4个会场同时进行,所以只能挑一些最感兴趣的内容,不免有些遗憾。

关于机器学习

tensorflow作为google的机器学习框架,在Keras的加入以后如虎添翼。本次的机器学习简介中就以tensorflow的几个例子入手进行了介绍。

现在的机器学习已经发展到了深度学习的阶段,在这之中最具代表性的就是深度神经网络学习,也就是用一个模型来模拟人类神经网络的思考过程。

人类神经网络的组成就是一个个的神经元,在机器学习中则以无数个变量来模拟这一个个的神经元,他们组成的网络就是机器神经网络。

以手写数字的识别为例,主讲人首先以普通的神经网络进行入门,再与卷积神经网络进行对比,在神经元(变量)的数量远远小于普通神经网络数量的情况下将错误率下降了50%,足以说明了卷积神经网络的强大。

而人类社会不仅仅是手写数字的识别,毕竟手写数字只有0-9这10种分类。

而目前公认的比较高效的VGG16卷积神经网络在图像识别领域中的应用,可以很轻松的将这分类扩展至1000甚至更多。

并且由于迁移学习,我们可以将神经网络的两部分特征提取和分类分开创建和使用,使得可以将已经创建并训练好的模型进行组合,提高了训练的效率降低了开发成本。并且tensorflow hub上已经有很多模型可以供其他开发者进行复用。

而在tensorflow的开发、构建和布署方面也是有一整套的解决方案,开发者可以将创建好的模型进行训练,这部分的开发和构建工作完全可以在一个独立的环境中进行。

然后可以将训练好的模型单独导出保存,再部署到各个需要的地方,比如服务器端有tensorflow serving,移动端有tensorflow lite,web端有tensorflow js,甚至还有各种其他语言的支持。

并且有了ML Kit和google cloud的加持,相信以后的发展一定会非常不错。

今天的机器学习只是一个简介,非常期待明天的tensorflow专场。

关于kotlin

kotlin从2011年出现开始到现在已经成为Android官方支持的开发语言,并且在Android上甚至有替代java的趋势,主讲人也一次次的强调在Android方面kotlin的优先战略。

他可以直接编译为java字节码在JVM环境下运行,也可以编译为javascript在没有JVM环境的设备上运行,这也是他的优势之一。

在安全性方面也较java有很大提升,可以将很多的异常在编译阶段就暴露出来,不必担心在运行时发生。

在简洁性方面更是超出java一大截,定义一个简单的javabean需要定义成员变量和setget方法,而在kotlin中只要一行就可以搞定。

而kotlin的扩展库KTX更是将这一主旨体现到了极致,极大的简化了开发者的开发量。

并且kotlin还原生支持协程,只要在方法定义上加上suspend关键字,就可以在使用异步协程的情况下又不用以回调这种非常影响代码阅读的方式实现。

(关于这点,有点类似javascript中解决“回调地狱”问题的时候使用的asnyc/await。)

再加上Android studio 3.5中自带的迁移工具支持,大大的简化了java代码重构成kotlin的工作量。

kotlin本身就是编译为java字节码文件,所以和java是可以互相调用的(在工作中其实已经发现很多非常好的第三方工具有重构成了kotlin版,比如okhttp4)。

关于flutter

flutter是一个移动端UI框架,由dart语言编写,也支持原生混合开发。完全dart开发的项目可以不改一行代码直接编译成ios和Android的app。

主讲人一次次的强调flutter的四大优势:美观、快速、高效、开源。

美观:使用flutter可以开发出很漂亮的用户界面。

快速:在Android studio 3.5下,flutter的热重载可以帮助开发者快速的在模拟器中直接获得修改后的结果。

高效:支持ios和Android开发,不需要一个功能在两个平台上开发两次,并且可以非常完美的兼容各种设备各种分辨率。并且由于是同一套代码,测试的压力也减少很多。

开源:项目已经在github开源,并且也有独立的中文社区。

就在今天flutter发布了1.9最新版,将web分支也合并进了主分支中,这样flutter仅仅需要一行编译命令就可以将代码编译成javascript在web端运行。

国内几个知名公司也上台分享了flutter的应用,阿里、腾讯、字节跳动等大厂,在新项目或者周期比较紧张的情况下也会选择flutter。

阿里巴巴的闲鱼也在今年上半年开源了flutter应用框架fish redux,flutter中文社区也在不断的壮大。

Day2

今天一天整个主会场都成了tensorflow专场,因为对tensorflow更为感兴趣所以就没有去其他会场。

一开场主讲人就介绍了目前机器学习在各个领域的运用,以及在未来的发展方向。

以前就了解到人工智能的三起三落,主讲人也提到了这一次机器学习将会有一个爆发是的发展,因为这是一个天时地利人和都集齐的时代。

与之前相比,这个时代有了大数据的加持,通过越来越多的技术手段我们可以从行行业业收集到各式各样的数据;

与之前相比,这个时代的计算机算力得到了飞速发展,普通台式机、笔记本都是以前大型服务器算力的几千上万倍,而组成集群化的服务器集群算力更是以前的百万亿万倍;

与之前相比,这个时代有了更先进的机器学习模型,神经网络的出现使得模型的构建更加方便。

关于tensorflow2.0

今年以来,tensorflow2.0一直在alpha版徘徊,就在今天主讲人宣布了tensorflow2.0正式发布(TensorFlow 2.0 RC),如果使用keras接口开发的1.X版本项目几乎可以直接迁移到2.0版本。

本次2.0版本的升级主要是在:

1.整合和清理了大量的API;

2.默认启用Eager execution模式,不再需要通过session来管理和运行计算图;

3.将keras作为这个版本的核心高级API,使建模更简捷;

4.支持分布式策略tf.distribute.Strategy;

5.新的模型结果保存格式,支持更多的平台

另外,通过继承keras的Layer类,用户可以自定义神经网络层;通过继承Model类,可以自定义模型;通过继承GradientTape类,可以自定义训练过程。

再有通过tensorflow serving将服务延伸到服务器端;通过tensorflow lite将服务延伸至移动端甚至单片机;通过tensorflow js将服务延伸至web及其他js环境。

新加入了这么多支持的平台,提高了开发布署上的复杂度,但是不要紧,这次的tensorflow extended可以完美解决这个问题。

tensorboard在可视化方面支持tensorflow2.0,甚至可以监控模型在训练时的性能,能够帮助开发者对模型进行调优。

对于tensorflow1.X的旧项目,本次也提供了代码迁移指南和自动转换脚本tf_upgrade_v2,并且也保留了部分老的api在tf.compat.v1中,帮助开发者平滑迁移。

关于tensorflow text

tf.text是tensorflow的自然语言处理模型,用于对文字语言进行分词和语义分析。

最早google是通过循环神经网络与转换模型来实现自然语言处理的。 在第二阶段google研发了BERT作为替代品,并且这个模型以及其变形在自然语言处理的模型中一直都名列前茅。

目前google的第三代自然语言处理模型XLNet以碾压BERT的存在出现,并且也已经开源。

因为tensorflow的计算内容为tensor,而一般数据包括图片在内都很容易能够转化为tensor,但是自然语言却不行。

所以在tf.text中引入了新的数据格式RaggedTensors来表示这类新的tensor,然后通过tokenizer对其进行分词操作,这样就完成了自然语言处理的第一步。

关于tensorflow lite

tensorflow的普通版功能强大,但是不适合在移动和物联网设备上运行,因为移动设备和物联网设备有着三个主要的问题:算力不够、内存不大、电量不足。

算力不足导致计算延迟变大、内存不足导致没有足够的空间加载模型、电量不足直接影响设备的续航,而tensorflow lite就是为了解决这三个问题而出现的。

tensorflow lite可以优化对cpu、gpu、dsp、npu的利用方式直接使用各种芯片的指令集和算子实现硬件加速,并且和各大硬件厂商的合作过程中使越来越多的芯片原生支持越来越多的指令集和算子。

在tensorflow lite平台上使用专门为移动端优化过的mobilnet模型架构,使在这个平台上运行的模型从架构层面就直接适配移动端。

同时针对tensorflow lite平台,google推出了模型优化工具包,主要是通过量化和剪枝的方式来优化和缩小模型的大小以适应tensorflow lite平台,而量化和剪枝是两个独立的方式,并且可以同时使用。

量化的意思是降低模型运算的精度,使用int8来代替float32的运算,这样直接可以将模型大小减少到原来的1/4,并且根据特殊的映射算法是的模型的运算结果几乎保持了原来的精度,只是略有下降而已。

剪枝的意思是将权重比较低的值直接剪掉丢弃,这个方法不同于模型计算中的dropout运算,开发者可以自定义剪枝的比例,实验表明剪枝的比例在大于60%的情况下模型的计算精度才有明显的下降。

以上两种模型的优化虽然会降低模型的预测精度,但是在算力不够、内存不大、电量不足的移动设备和物联网设备来说这些精度损失带来的收益还是很可观的。

最后tensorflow lite 还有micro版,可以在条件更苛刻的MCU设备上运行,这类设备没有完整的操作系统,只有kb级的ram和flash,可能只是由普通的纽扣电池供电。

关于tf.distribute

tf.distribute.Strategy是tensorflow的分布式计算API,使得tensorflow可以分布式的运算。

而这里的分布式和一般意义上的分布式不同,对于tensorflow来说,不仅仅是多台机器才算是分布式,多个cpu、gpu都是分布式。

而通过tf.distribute.Strategy只需要修改几行代码就可以实现模型在各种环境下的分布式运算。

但是不管是多机器还是多cpu、多gpu的运算大致的思路都是一样的:

1.将模型镜像加载到各个分片中

2.各自分配一些数据进行梯度运算

3.使用all-reduce算法回收梯度运算结果进行合并

4.将合并后的梯度广播到各个分片中

5.再从第2步开始循环

关于tensorflow js

tensorflow js使得模型在只要有js环境下就能够运行。

然而目前绝大多数的js场景都是web端,这就使得对于tensorflow js平台上的运行的模型对大小的限制变得非常苛刻,特别是在微信端就直接要求用户文件不能超过2MB,其中包括用户程序和tf模型。

但是将模型布署在web端运行的优势还是很多的,比如最直接的就是保护用户隐私,运算过程不需要将用户数据上传到服务器,这样同时也减少了网络传输的流量和降低了服务布署的成本,在降低延迟的同时也直接提升了用户体验。

对此,对于开发者的要求也是非常高的,需要在尽量小的模型里加上更多的功能,同时也要在有限的算力上尽量的降低延迟。

关于tensorflow extended(TFX)

之前讲到tensorflow2.0支持了越来越多的平台,这就使得开发布署的复杂度提升了很多,而tensorflow extended就是解决这一系列问题的一套解决方案。

这套解决方案一共分为四个模块

1.tensorflow data validation:帮助开发者整理和验证训练数据

2.tensorflow transform:将数据转换为tensorflow在运算过程中合适的格式

3.tensorflow model analysis:评估模型,与之前的模型性能及预测结果进行比较

4.tensorflow serving:发布及版本控制

© 著作权归作者所有

中年老俞
粉丝 4
博文 15
码字总数 20866
作品 0
苏州
程序员
私信 提问
重头戏来了!2019 Google 开发者大会报名开始!

今天起 谷歌开发者大会正式开放报名! 你还在等什么? 2019 谷歌开发者大会将于 9 月 10 日和 11 日在上海举办。这一次,我们为你准备了不容错过的多重惊喜。 报名此次大会,你将可以: 收获...

Android_开发者
08/08
0
0
Get到这些,明年你也能参加谷歌开发者大会!

撰文:瓜小妹 编辑:所长瓜田君 12月13日,今年在上海区的谷歌开发者大会 ——Google Developer Days(简称 GDD)在上海跨国采购中心开幕。身为设计师的笔者,这次也很 荣(jiǎo)幸(xìn...

西瓜设计研究所
2017/12/18
0
0
你最喜欢的 Google 开发技术是什么?评论送 Google 限量音箱,电脑包

更新中奖名单 本期活动中奖结果:Google2017大会礼品中奖名单出炉~进来还有机会中奖! 2017 Google 开发者大会终于要来了!一场干货满满并且全程免费的大会,现场还有各种体验活动及 Google...

稀土君
2017/11/09
0
0
送票 | 中国 2017 Google 开发者大会来了!

Google 开发者大会再度来袭!(文末有福利) 2017 Google 开发者大会为期两天,将于 12 月 13 日和 14 日在上海举办,主题将涵盖机器学习 (Machine Learning)、Android、移动网络(Mobile We...

谷歌开发者
2017/11/08
0
0
直播 | 2017 Google 开发者大会直播入口!

谷歌开发者大会 今年,Google 开发者大会再度来袭!大会将于 12 月 13 日和 14 日在上海举办,主题涵盖机器学习 (Machine Learning)、Android、移动网络 (Mobile Web)、TensorFlow、Firebas...

谷歌开发者
2017/12/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Security 实战干货:实现自定义退出登录

1. 前言 上一篇对 Spring Security 所有内置的 Filter 进行了介绍。今天我们来实战如何安全退出应用程序。 2. 我们使用 Spring Security 登录后都做了什么 这个问题我们必须搞清楚!一般登录...

码农小胖哥
1分钟前
0
0
JVM核心知识-类加载机制

JVM中类的生命周期包括7个阶段,加载、准备、验证、解析、初始化、使用、卸载。其中准备、验证、解析被归为连接阶段。 加载 jvm在这个阶段完成的工作 通过类名获取类的二进制字节流 将这个字...

moon888
1分钟前
0
0
.net工作流引擎ccflow流程结束相关功能的介绍

关键字: 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 表单引擎 工作流功能说明 工作流设计 工作流快速开发平台 业务流程管理 bpm工作流系统 java工作流主流框架 自定义...

孟娟
14分钟前
2
0
APP 值入轻量级钱包以太坊网络钱包

APP 值入轻量级钱包以太坊网络钱包

xiaodong16
18分钟前
2
0
云原生下数据治理的微服务架构

摘要: 现代软件发展历程中,微服务概念早在2014年由两位美国学者提出,2015年云原生也在linux基金会的推动下茁壮成长。短短几年,越来越多的公司投入研究,越来越多的技术框架孕育而生。本文...

恒宝乐园
26分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部