首先来到的是主会场的本次大会开幕主旨演讲,带来了本次大会的重点:grow with google成长计划、Android 十、firebase、 flutter1.九、wear OS、ARCore等等,以及明天会花整整一天的重头:tensorflow专场。javascript
想听的东西不少,可是因为分了4个会场同时进行,因此只能挑一些最感兴趣的内容,难免有些遗憾。java
关于机器学习ios
tensorflow做为google的机器学习框架,在Keras的加入之后如虎添翼。本次的机器学习简介中就以tensorflow的几个例子入手进行了介绍。git
如今的机器学习已经发展到了深度学习的阶段,在这之中最具表明性的就是深度神经网络学习,也就是用一个模型来模拟人类神经网络的思考过程。github
人类神经网络的组成就是一个个的神经元,在机器学习中则以无数个变量来模拟这一个个的神经元,他们组成的网络就是机器神经网络。web
以手写数字的识别为例,主讲人首先以普通的神经网络进行入门,再与卷积神经网络进行对比,在神经元(变量)的数量远远小于普通神经网络数量的状况下将错误率降低了50%,足以说明了卷积神经网络的强大。算法
而人类社会不只仅是手写数字的识别,毕竟手写数字只有0-9这10种分类。redux
而目前公认的比较高效的VGG16卷积神经网络在图像识别领域中的应用,能够很轻松的将这分类扩展至1000甚至更多。api
而且因为迁移学习,咱们能够将神经网络的两部分特征提取和分类分开建立和使用,使得能够将已经建立并训练好的模型进行组合,提升了训练的效率下降了开发成本。而且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中文社区也在不断的壮大。
今天一天整个主会场都成了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:发布及版本控制