【导读】TensorFlow 在 2015 年年末一出现就受到了极大的关注,通过一年多的发展,已经成为了在机器学习、深度学习项目中最受欢迎的框架之一。自发布以来,TensorFlow 不断在完善并增长新功能,直到在此次大会上发布了稳定版本的 TensorFlow V1.0。此次是谷歌第一次举办的TensorFlow开发者和爱好者大会,咱们从主题演讲、有趣应用、技术生态、移动端和嵌入式应用多方面总结此次大会上的Submit,但愿能对TensorFlow开发者有所帮助。node
TensorFlow:面向大众的机器学习框架python
TensorFlow在过去得到成绩主要有如下几点:ios
TensorFlow被应用在Google不少的应用包括:Gmail, Google Play Recommendation, Search, Translate, Map等等;git
在医疗方面,TensorFlow被科学家用来搭建根据视网膜来预防糖尿病致盲(后面也提到Stanford的PHD使用TensorFlow来预测皮肤癌,相关工做上了Nature封面);github
经过在音乐、绘画这块的领域使用TensorFlow构建深度学习模型来帮助人类更好地理解艺术;算法
使用TensorFlow框架和高科技设备,构建自动化的海洋生物检测系统,用来帮助科学家了解海洋生物的状况;api
TensorFlow在移动客户端发力,有多款在移动设备上使用TensorFlow作翻译、风格化等工做;缓存
TensorFlow在移动设备CPU(高通820)上,可以达到更高的性能和更低的功耗;网络
TensorFlow ecosystem结合其余开源项目可以快速地搭建高性能的生产环境;app
TensorBoard Embedded vector可视化工做;
可以帮助PHD/科研工做者快速开展project研究工做。
Google第一代分布式机器学习框架DistBelief再也不知足Google内部的需求,Google的小伙伴们在DistBelief基础上作了从新设计,引入各类计算设备的支持包括CPU/GPU/TPU,以及可以很好地运行在移动端,如安卓设备、ios、树莓派等等,支持多种不一样的语言(由于各类high-level的api,训练仅支持Python,inference支持包括C++,Go,Java等等),另外包括像TensorBoard这类很棒的工具,可以有效地提升深度学习研究工做者的效率。
TensorFlow在Google内部项目应用的增加也十分迅速:在Google多个产品都有应用如:Gmail,Google Play Recommendation, Search, Translate, Map等等;有将近100多project和paper使用TensorFlow作相关工做。
TensorFlow在过去14个月的开源的时间内也得到了不少的成绩,包括475+非Google的Contributors,14000+次commit,超过5500标题中出现过TensorFlow的github project以及在Stack Overflow上有包括5000+个已被回答的问题,平均每周80+的issue提交。
过去1年,TensorFlow从最开始的0.5,差很少一个半月一个版本:
TensorFlow 1.0的发布
TensorFlow1.0也发布了,虽然改了好多api,可是也提供了tf_upgrade.py来对你的代码进行更新。TensorFlow 1.0在分布式训练inception-v3模型上,64张GPU能够达到58X的加速比,更灵活的高层抽象接口,以及更稳定的API。
New High Level API
对于新的抽象接口,TensorFlow相对于其余DeepLearning FrameWork作的比较好,layers能让人很容易build一个model,基于layer之上的包括TF.Learn里面仿照scikit-learn风格的各类estimator设计以及以后将融入TensorFlow官方支持的Keras,可以让小伙伴用几行配置模型结构、运行方式、模型输出等等;在这层之上就有canned Estimator,所谓的model in box,好比lr,kmeans这类。
Broad ML Support
在TensorFlow中有一些高兴的机器学习的算法实现,如LR, SVM、 Random Forest,在TF.Learn中有不少经常使用的机器学习算法的实现,用户能够很快的使用,并且API风格和scikit-learn很相似,并且在后续的video提到会有分布式的支持。
XLA: An Experimental TensorFlow Compiler
TensorFlow XLA可以快速地将TensorFlow转成比较底层的实现(依赖device),后面也有talk详细讲述了XLA。
普遍的合做
Included in IBM's PowerAI
Support movidus myriad 2 accelerator
Qualcomm's Hexagon DSP (8倍加速,这里还请了Qualcomm的产品负责人来站台)
TensorFlow In Depth
TensorFlow在research和production上有很好的优点,以下图:
在模型训练上,1机8卡的性能不管是在一些标准的基准测试或者是真实数据上都有比较好的加速比:
固然在多机分布式训练上,可以达到64张GPU上58倍的加速比:
TensorFlow被一些顶尖的学术研究项目使用:
Neural Machine Translation
Neural Architecture Search
Show and Tell
固然TensorFlow在生产上也被普遍应用:
如Mobile Google Translate,Gmail等等,也被国内外不少大厂使用作为模型训练的工具。
这些都是Jeff Dean在Keynote的内容讲到的内容,内容有点多,并且我的感受这群google的小伙伴的ppt作的有点任性,不过谁叫他们牛逼呢,接下来几个talk比较有技术含量,相信各位会更加有兴趣。
有趣的应用案例
皮肤癌图像分类
首先咱们说下两个数据:1. 医疗机构统计皮肤癌在早期的治愈率是98%;2. 在2020,预计全球有61亿台智能手机。
这位小哥作的工做是啥呢,他拿到了一批皮肤癌的数据,而后使用一个pretrained的inception-v3对数据来作一个inference:
最终结果:
并且在手机上很容易搭建,完成一个app用来作早起皮肤癌的检测:
最终相关成果发表在Nature,并且在Nature的封面,这是一个特别成功地经过计算机视觉及深度学习相关的技术,利用廉价的移动设备,可以颇有效地检测是否有皮肤癌,大大节省了医疗检测的成本,相信在将来会有更多相关的技术出现。
利用AI预测糖尿病,预防失明
这个talk讲的前面也提到的经过视网膜图像预测糖尿病,预防失明:
经过视网膜图片预测糖尿病是一个困难的问题,即便是专业的医生,也很难去判断,可是深度学习却能够帮助咱们:
经过收集适量的医疗数据,构建一个26layers的深度卷积网络,咱们可让网络自动学习这些图像中的feature,来得到较高的分类准确率,而这个是人眼很难解决的。
这里有一个demo的演示:
模型最后的评估比专业医生对比,F-score为0.95,比专业医生的中位数0.91还高,这个太厉害了,相信不久会看到深度学习在医疗,尤为是这种病症图像分析上有不少惊人的成果。
Wide & Deep In Google Play
这项技术有段时间特别火,被用来作推荐相关的应用,首先解释下Memorization和Generalization:
模型的基本结构以下:
整个推荐会同事考虑到商品的相关性以及一些推理关系,例如老鹰会飞、麻雀会飞这类逻辑属于Memorization, 而说带翅膀的动物会飞这属于Genralization。
在具体的应用场景,如Google Play的App推荐:
这里构建一个以下图的网络来进行训练(joint training):
为啥要joint training,而不是直接用deep和wide的来作ensemble呢?
这里作这个给出一个解释,由于wide和deep会相互影响,最后精确度会高,而且model会比较小:
而上面提到的Wide & Deep Learning Model在Tensorflow下仅仅只须要10行代码来实现(忽然想起了那个100美圆画一条线的故事):
Magenta: 音乐和艺术生成
这个项目讲的是利用深度学习来作一些艺术相关的工做,项目地址:https://github.com/tensorflow/magenta有一些很好玩的东西,如风格化,生成艺术家风格的音乐,利用深度学习模型模拟人类对艺术的想象力,创造出属于DeepLearning的艺术风格。
DeepMind团队所作的一些开发工做
DeepMind在被Google收购以后,也选择TensorFlow做为其深度学习相关研究的平台,而后作了不少颇有意思的东西。
1. Data Center Cooling
这是Google在全世界各地若干个数据中心之一:
而后这群Google的小伙伴作了些什么事情呢?
Google的小伙伴利用强化学习,是的!你没有听错,应用在AlphaGo上的一种技术来作数据中心冷却设备的自动控制,而且效果十分显著:
2. Gorila
Gorial是DeepMind下的一个强化学习的框架,基于TensorFlow的高级API实现,很稳定,只须要更改其中极少部分代码就能够完成新的实验,支持分布式训练,十分高效,而且训练好的模型能够经过TensorFlow Serving快速地部署到生产环境。
3. AlphaGo
这个相信不说,你们都知道的,第一次在围棋上战胜人类,而后升级版的Master 连续60盘不败,原理不说了,网络上不少分析文章,贴两张图聊表敬意:
4. WaveNet:语音音频合成
这里DeepMind的小哥演示了WaveNet的一些demo, 具体的能够参见(https://deepmind.com/blog/wavenet-generative-model-raw-audio/)来了解。贴一些效果对比:
XLA 及 Keras 与 TensorFlow 的融合
XLA与TensorFlow的结合
TensorFlow的各方面的优点都很突出,除了在速度这块有些不足,若是,TensorFlow能在速度上作进一步优化,会怎么样呢 ?
是的,Google的开发者也意识到这个问题,因而有了这个XLA, XLA的优点:
提升执行速度,编译子图会减小生命周期较短的op的时间,来至少TensorFlow执行是的时间;融合pipelined的op来减小内存的开销;
经过分析和调节内存需求,来减小不少中间结果的缓存;
减小定制化op的依赖,经过提供自动化融合底层ops的性能来达到原先须要手工去融合定制化op的性能;
减小移动设备的内存占用,使用AOT编译子图来减小tensorflow执行时间,可以共享object/header file pair给其余应用,可以在Mobile Inference上减小几个数量级的内存占用;
提升了程序的可移植性,可以在不改变大部分tensorflow源码的前提下,很容易地更改以适应新的硬件设备,
XLA主要包括两种使用方式:JIT(Just in time)可以自动将Graph中的部分子图经过XLA融合某些操做来减小内存需求提升执行速度;AOT(Ahead of time)能够提早将Graph转换为能够执行的源码,减小生成的可执行文件的大小,减小运行的时间消耗,一个很明显的应用场景是模型在移动设备上的Inference优化。
由于XLA原理涉及到编译器,这块不是我擅长的地方,因此这里就这样过了, 若是有兴趣的小伙伴能够关注下(https://www.tensorflow.org/versions/master/experimental/xla/)还有这次TensorFlowDev Submit上XLA的talk(https://www.youtube.com/watch?v=kAOanJczHA0&index=2&list=PLOU2XLYxmsIKGc_NBoIhTn2Qhraji53cv#t=108.706756)
最后贴几张XLA的一些评测性能:
Keras与TensorFlow的集成
Keras 是一个能够在不少平台上应用的深度学习框架,"An API Specify for building deep learning models across many platforms"。
TensorFlow已经会在官方TensorFlow支持,1.1会在tf.contrib,1.2会tf.keras,并且会支持TensorFlow Serving,是否是很心动。
Keras的做者在TensorFlow Dev Submit上讲了如下内容:
因此以后Keras的用户能够更快的在TensorFlow的框架下作出相应地模型,能更方便地进行分布式训练,使用Google的Cloud ML, 进行超参,还有更更重要的:TF-Serving。这些feature如今好像尚未支持,不过应该很快了,你们能够期待下。
这里,Francois Chollet使用Keras构造了一个Video-QA的model,这个模型在Keras的官方文档也有描述,具体能够去那边看看,大概是这样一个场景:
这样一个场景,利用原生的python构造太难了,可是用Keras,只须要考虑设计你的模型,如何来完成相似的功能,彻底不用担忧coding的实现,如图是一个相似问题的一个简单地模型设计:
更详细一点:
而在Keras中如何实现呢?
video = tf.keras.layers.Input(shape=(None, 150, 150, 3))cnn = tf.keras.applications.InceptionV3(weights='imagenet', include_top=False, pool='avg)cnn.trainable = Falseencoded_frames = tf.keras.layers.TimeDistributed(cnn)(video)encoded_vid = tf.layers.LSTM(256)(encode_frames)question = tf.keras.layers.Input(shape=(100), dtype='int32')x = tf.keras.layers.Embedding(10000, 256, mask_zero=True)(question)encoded_q = tf.keras.layers.LSTM(128)(x)x = tf.keras.layers.concat([encoded_vid, encoded_q])x = tf.keras.layers.Dense(128, activation=tf.nn.relu)(x)outputs = tf.keras.layers.Dense(1000)(x)model = tf.keras.models.Mode([video, question], outputs)model.compile(optimizer=tf.AdamOptimizer(), loss=tf.softmax_crossentropy_with_logits)
这里代码是没法在如今的tensorflow版本上跑的,若是想了解下keras上构建上述模型的简便性,能够看看Keras的文档(https://keras.io/getting-started/functional-api-guide/)。Keras在构造深度模型的方即是你们众所周知的,值得期待以后Keras在TensorFlow的更新:
TensorFlow High-Level APIs: Models in a Box
TensorFlow在灵活性、可扩展性、可维护性上作的很好,可是如今在高级api、模块式算法这块原先都还不足,可是Google Brain的工程师在这个talk上介绍了一些High-level API的相关工做。
layers: 封装了一些层的操做,简化用原生TensorFlow源码,好比new 一个variable来作weight等等;
Estimator or Keras: 封装了一些更高层的操做包括,train和evaluate操做,用户能够经过几行代码来快速构建训练和评估过程;
Canned Estimators: 更高级API,所谓的Models in a box
构造左图中所示的深度网络只须要如图右中的七行代码一样,构建训练、评估、预测也很快能够经过api调用完成:
最后是Model in a Box
area = real_valued_column("square_foot")rooms = real_valued_column("num_rooms")zip_code = sparse_column_with_integerized_feature("zip_code", 100000)regressor = LinearRegressor(feature_columns=[area, room, zip_code])classifier.fit(train_input_fn)classifier.evaluate(eval_input_fn)
其余技术及生态
ML Toolkit
TensorFlow可能最开始被人知晓,就是由于你们都以为他是一个深度学习的框架,其实不是,如今TensorFlow上还有不少机器学习的算法集成:
并且算法API的开发都是仿照scikit-learn的风格,有Python下作机器学习的小伙伴,能够很快的适应。
这里值得提出的,有趣TensorFlow对机器学习和深度学习模型的支持,小伙伴们能够特别容易地结合传统的机器学习方法和深度学习模型来一块儿训练:
分布式TensorFlow
TensorFlow在分布式性能上,前面也提到了,在1.0版本上有了很大的提高能够作到64块GPU上达到58倍的加速,这里先基本介绍下数据并行和模型并行:
数据并行 每个worker上有完整的模型,部分数据,参数的更新传给Params Server;
模型并行 每个worker上有部分的网络模型;
怎么在TensorFlow写分布式代码,这里我就不说了,很简单地配置,这里我讲下,可能大部分像我这样的小伙伴以前不太了解的一些彩蛋。在TensorFlow中作分布式训练的一些技巧,有过度布式train的经验应该会很感激这些黑科技:
Round-Robin variables
Load balancing and partitioning
上面说的是啥呢? Params Server在保存模型的参数时,默认是每个ps存一个variable,而后下一个到下个ps上存,可是就会存在不少问题,可能这个variable很小,可是另外一个很大,这样你会发现ps和work之间的带宽的占用差距不少,怎么解决呢?看下面几张图。
说点题外话,为啥我在看到这里的时候特别激动呢,笔者以前在开展团队内部的分布式训练平台时就遇到这个问题,咱们在测试AlexNet模型时,发现多个ps上的带宽占用差异极大,缘由在与AlexNet模型的最后三个全链接参数太多,形成了ps的不均衡。
上面说了下Distributed TensorFlow我特别激动的东西,以后talk的就是比较简单的了,若是在TensorFlow作分布式的job,文档里面都有,很简单,这里不提了不对,这里还必须说下TensorFlow对于容灾的一个支持。
下图是几种分布式下机器挂掉的状况:
多麻烦是吧,可是没有关系,在TensorFlow下可以自动对这些进行一个快速的恢复,只须要更改一行代码:
将模型布入生产环境
如何把训练好的模型快速部署在生产环境提供可用的服务,TensorFlow Serving就是专一在这块,我这里简单介绍下吧:
把训练好的模型提供生产环境可用的服务,一般有如下几个需求:
长期稳定服务,低时延
支持多个模型服务
支持同一模型多版本
保证计算时耗尽可能小以保证一些实时性需求
mini-batching的支持,以提升效率
TensorFlow Serving的设计就是为了解决这些需求,并且TensorFlow基于gRPC,支持多种语言。
TensorFlow生态
这部分讲了若是利用TensorFlow生态结合一些流程的框架好比Spark、Hadoop等等来更好地使用TensorFlow。
1. 数据准备工做
支持的数据读取方法,从快到慢依次是:
tf.Example, tf.SequenceExample对象;
原生的读取CSV,JSON的OP;
直接从Python feed数据(最简单)。
如何在其余如Hadoop, Spark上支持TFRecords(Beam原生支持) 见(github.com/tensorflow/ecosystem)
2. 集群的管理
TensorFlow支持如下多种框架:
3. 分布式存储
4. 容器支持
5. 模型导出
SavedModel: 1,TensorFlow模型的标准保存格式;2,包括如下必须的assets,好比vocabularies(不太会翻,啥意思);
GraphDef: 一般在移动设备的模型保存比较通用。
移动端以及嵌入式应用
Mobile and Embedded TensorFlow
Pete Warden介绍了怎么在移动设备好比安卓、IOS设备、树莓派上面怎么使用TensorFlow来作一些开发,具体的可能对移动设备程序开发的小伙伴们比较有用,有兴趣的能够去看看https://www.youtube.com/watch?v=0r9w3V923rk&index=9&list=PLOU2XLYxmsIKGc_NBoIhTn2Qhraji53cv
Hands On TensorBoard
这个talk主要是介绍了TensorBoard的一些应用,不少用法之前都没有尝试过,听演讲者描述以后受益不浅。
# Define a simple convolutional layer def conv_layer(input, channels_in, channels_out): w = tf.Variable(tf.zeros([5, 5, channels_in, channels_out])) b = tf.Variable(tf.zeros([channels_out])) conv = tf.nn.conv2d(input, w, strides=[1, 1, 1, 1], padding="SAME") act = tf.nn.relu(conv + b) return act# And a fully connected layer def fc_layer(input, channels_in, channels_out): w = tf.Variable(tf.zeros([channels_in, channels_out])) b = tf.Variable(tf.zeros([channels_out])) act = tf.nn.relu(tf.matmul(input, w) + b) return act# Setup placeholders, and reshape the data x = tf.placeholder(tf.float32, shape=[None, 784]) y = tf.placeholder(tf.float32, shape=[None, 10]) x_image = tf.reshape(x, [-1, 28, 28, 1])# Create the network conv1 = conv_layer(x_image, 1, 32) pool1 = tf.nn.max_pool(conv1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="SAME")conv2 = conv_layer(pooled, 32, 64) pool2 = tf.nn.max_pool(conv2, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="SAME") flattened = tf.reshape(pool2, [-1, 7 * 7 * 64])fc1 = fc_layer(flattened, 7 * 7 * 64, 1024) logits = fc_layer(fc1, 1024, 10)# Compute cross entropy as our loss function cross_entropy = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=y))# Use an AdamOptimizer to train the network train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)# compute the accuracy correct_prediction = tf.equal(tf.argmax(logits, 1), tf.argmax(y, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))# Initialize all the variables sess.run(tf.global_variables_initializer())# Train for 2000 steps for i in range(2000): batch = mnist.train.next_batch(100)# Occasionally report accuracy if i % 500 == 0: [train_accuracy] = sess.run([accuracy], feed_dict={x: batch[0], y: batch[1]}) print("step %d, training accuracy %g" % (i, train_accuracy))# Run the training step sess.run(train_step, feed_dict={x: batch[0], y_true: batch[1]})
不少小伙伴都写过相似的代码,构造网络,而后设定训练方式,最后输出一些基本的结果信息,以下:
step 0, training accuracy 10% step 500, training accuracy 12% step 1500, training accuracy 9% step 2000, training accuracy 13%
TensorFlow给你的不只仅是这些,有一个特别棒的工具TensorBoard可以可视化训练过程当中的信息,能让人直观的感觉,固然须要一些简单的配置:
写入Graph
writer = tf.summary.FileWriter("/tmp/mnist_demo/1") writer.add_graph(sess.graph)
这里虽然可以可视化Graph,却感受很杂乱,咱们能够经过给一些node增长name,scope,让图变得更好看点:
def conv_layer(input, channels_in, channels_out, name="conv"): with tf.name_scope(name): w = tf.Variable(tf.zeros([5, 5, channels_in, channels_out]), name="W") b = tf.Variable(tf.zeros([channels_out]), name="B") conv = tf.nn.conv2d(input, w, strides=[1, 1, 1, 1], padding="SAME") act = tf.nn.relu(conv + b) return tf.nn.max_pool(act, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="SAME")def fc_layer(input, channels_in, channels_out, name="fc"): with tf.name_scope(name): w = tf.Variable(tf.zeros([channels_in, channels_out]), name="W") b = tf.Variable(tf.zeros([channels_out]), name="B") return tf.nn.relu(tf.matmul(input, w) + b)# Setup placeholders, and reshape the data x = tf.placeholder(tf.float32, shape=[None, 784], name="x") x_image = tf.reshape(x, [-1, 28, 28, 1]) y = tf.placeholder(tf.float32, shape=[None, 10], name="labels")conv1 = conv_layer(x_image, 1, 32, "conv1") conv2 = conv_layer(conv1, 32, 64, "conv2")flattened = tf.reshape(conv2, [-1, 7 * 7 * 64]) fc1 = fc_layer(flattened, 7 * 7 * 64, 1024, "fc1") logits = fc_layer(fc1, 1024, 10, "fc2")with tf.name_scope("xent"): xent = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=y))with tf.name_scope("train"): train_step = tf.train.AdamOptimizer(1e-4).minimize(xent)with tf.name_scope("accuracy"): correct_prediction = tf.equal(tf.argmax(logits, 1), tf.argmax(y, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))writer = tf.summary.FileWriter("/tmp/mnist_demo/2") writer.add_graph(sess.graph)
经过TensorFlow的api,收集更多的数据记录显示在TensorBoard中:
tf.summary.scalar('cross_entropy', xent) tf.summary.scalar('accuracy', accuracy)tf.summary.image('input', x_image, 3)
修改Conv的代码,将Weight,bias,act加入到histogram中:
def conv_layer(input, channels_in, channels_out, name="conv"): with tf.name_scope(name): w = tf.Variable(tf.zeros([5, 5, channels_in, channels_out]), name="W") b = tf.Variable(tf.zeros([channels_out]), name="B") conv = tf.nn.conv2d(input, w, strides=[1, 1, 1, 1], padding="SAME") act = tf.nn.relu(conv + b) tf.summary.histogram("weights", w) tf.summary.histogram("biases", b) tf.summary.histogram("activations", act) return tf.nn.max_pool(act, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="SAME")
配置将训练过程当中的数据写入:
merged_summary = tf.summary.merge_all() writer = tf.summary.FileWriter("/tmp/mnist_demo/3") writer.add_graph(sess.graph)for i in range(2001): batch = mnist.train.next_batch(100) if i % 5 == 0: s = sess.run(merged_summary, feed_dict={x: batch[0], y: batch[1]}) writer.add_summary(s, i) sess.run(train_step, feed_dict={x: batch[0], y: batch[1]})
Hyperparameter Search
此次这个TensorBoard的talk给我最大的收获就是用TensorBoard作Hyperparamter Search 是这么的方便, 此次talk中主要演示超参的两个方面:
不一样学习率
不一样网络结构
# Try a few learning rates for learning_rate in [1E-3, 1E-4, 1E-5]: # Try a model with fewer layers for use_two_fc in [True, False]: for use_two_conv in [True, False]: # Construct a hyperparameter string for each one (example: "lr_1E-3,fc=2,conv=2) hparam_str = make_hparam_string(learning_rate, use_two_fc, use_two_conv) writer = tf.summary.FileWriter("/tmp/mnist_tutorial/" + hparam_str) # Actually run with the new settings mnist(learning_rate, use_two_fully_connected_layers, use_two_conv_layers, writer)
tensorboard --logdir /tmp/mnist_tutorial
Embedding Visualizer
embedding = tf.Variable(tf.zeros([10000, embedding_size]), name="test_embedding") assignment = embedding.assign(embedding_input)config = tf.contrib.tensorboard.plugins.projector.ProjectorConfig() embedding_config = config.embeddings.add() embedding_config.tensor_name = embedding.name embedding_config.sprite.image_path = os.path.join(LOG_DIR, 'sprite.png') # Specify the width and height of a single thumbnail. embedding_config.sprite.single_image_dim.extend([28, 28]) tf.contrib.tensorboard.plugins.projector.visualize_embeddings(writer, config)for i in range(2001): batch = mnist.train.next_batch(100) if i % 5 == 0: [train_accuracy, s] = sess.run([accuracy, summ], feed_dict={x: batch[0], y: batch[1]}) writer.add_summary(s, i) if i % 500 == 0: sess.run(assignment, feed_dict={x: mnist.test.images, y_true: mnist.test.labels}) saver.save(sess, os.path.join(LOG_DIR, "model.ckpt"), i) sess.run(train_step, feed_dict={x: batch[0], y_true: batch[1]})
Future for TensorBoard
将来TensorBoard,会在如下三个方面来作一些提高:
在TensorBoard上集成Tensorflow的调试
增长插件的支持
企业级TensorBoard的支持
总结
照例总结下,从上面不难看出TensorFlow在过去一年的时间里确实作了不少颇有意思的工做,不管是在Reasearch仍是Production上,包括各类有意思的工具,其中收获最大的是利用TensorFlow来作超参的调节、还有Keras的新的支持、分布式的各类模型变量保存的优化方法、分布式容灾、XLA的支持是的模型更快,那么花在看这些演讲上的时间感受没有浪费,可是由于我的知识有限,如上面有错误或者不周到的地方,欢迎指出,敬请谅解。