寒蟾
嗯。。。这种问题,如果有应用过TensorFlow做大规模分布式机器学习系统的话,那么已经可以算作熟悉TensorFlow了。当然如果要检验是否熟悉Tensorflow,那么可以用下面这些标准大概确认下自己的熟悉程度,当然同时也可以用来查缺补漏。
Tensorflow基础知识点
计算图
在Tensorflow中,经常提及到计算图的概念,那什么是计算图呢?它实质上是一个全局数据结构:计算图是一个有向图,捕获有关计算方法的指令。我们来看看简单的计算图形成,通过以下代码,我们可以生成2+3的步骤,但是只包含计算步骤,不包含结果,至少目前还没实现。
会话
会话的概念就是将计算图生成的步骤逐一执行,处理内存分配和优化,使我们能够实际执行由图形指定的计算。例如以下代码:
占位符和 feed_dict
占位符是一种用于接受外部输入的节点,而feed_dict 属性是为了给占位符提供实质的数值。
变量共享
你可能会碰到带有变量共享的 Tensorflow 代码,代码有它们的作用域,并设置“reuse=True”。我强烈建议你不要在代码中使用变量共享。如果你想在多个地方使用单个变量,只需要使用指向该变量节点的指针,并在需要时使用它。换句话说,对于打算保存在内存中的每个参数,应该只调用一次 tf.get_variable()。
优化器
在深度学习中,典型的“内循环”训练如下:
获取输入和 true_output;
根据输入和参数计算出一个“猜测”;
根据猜测和 true_output 之间的差异计算出一个“损失”;
根据损失的梯度更新参数。
优化器的作用在于对于找到的每个变量节点,它计算与损失相关的变量梯度。然后,它为该变量计算新值:当前值减去梯度乘以学习率。最后,它执行一个赋值操作来更新变量的值。
用 tf.Print 进行调试
一般来说,检查计算图中发生了什么是很困难的。你不能使用常规的 Python 打印语句,因为你永远无法访问到要打印的值,这时候就需要用tf.Print。
常用模型的Tensorflow实现
对于这一块内容,最好自己用编程语言实现过一遍,考验深度学习基础功底。
卷积网络(Convolutional Network)
循环神经网络(LSTM)(Recurrent Neural Network (LSTM))
受限玻尔兹曼机(Restricted Boltzmann Machine)
深度信念网络(Deep Belief Network)
作为RBM堆叠的深度自编码器(Deep Autoencoder as stack of RBMs)
去噪自编码器(Denoising Autoencoder)
堆叠的去噪自编码器(Stacked Denoising Autoencoder)
作为去噪自编码器堆叠的深度自编码器(Deep Autoencoder as stack of Denoising Autoencoders)
多层感知器(MultiLayer Perceptron)
Logistic 回归
TensorFlow的交叉熵函数
交叉熵(Cross Entropy)是Loss函数的一种(也称为损失函数或代价函数),用于描述模型预测值与真实值的差距大小,常见的Loss函数就是均方平方差(Mean Squared Error)。
交叉熵具体定义如下:
TensorFlow针对分类问题,实现了四个交叉熵函数,分别是tf.nn.sigmoid_cross_entropy_with_logits
tf.nn.softmax_cross_entropy_with_logits
tf.nn.sparse_softmax_cross_entropy_with_logits
tf.nn.weighted_cross_entropy_with_logits
我会在这里发布所有与科技、科学有关的有趣文章,欢迎订阅我的头条号。偶尔也回答有趣的问题,有问题可随时在评论区回复和讨论。
(码字不易,若文章对你帮助可点赞支持~)
杨沐白
试答一下。如有不对的地方,还望见谅。
随着人工智能热潮的兴起,机器学习、深度学习等相关的职位都变的火爆异常。也有越来越多的人在简历上写着精通机器学习、深度学习和各种框架(如Tensorflow,Caffe,Torch等)。但在实际的面试过程中,我们很容易发现大多数自称熟悉的候选人其实仅仅停留在“用过"这个程度上,远远达不到熟悉。
我认为“熟悉”Tensorflow可以分为两个方面,作为研发人员,根据你期望面试的岗位深入了解一个方面应该就足够了。
一、算法工程师(应用)
作为算法实现或者应用方向的工程师,Tensorflow只是作为一个工具,用来实现一些paper上的模型或者你个人的idea。那么最重要的就是能够把Tensorflow这个框架用的得心应手,大概总结以下几点,可以自己check。
对tensorflow中常用的op是否能够熟练使用,如tf.concat,tf.slice,tf.tile等(一般会用numpy的应该没问题)
是否能够熟练使用原生的基础网络,如conv2d,rnn_cell等。以及衍生出的各种变种,如
separable_conv2d,lstm,gru等。
是否能够利用tensorflow开发出一些经典的模型并训练,如VGG-net,ResNet等。
是否能够基于tensorflow完整的实现一个模型的构建、训练、验证、推理、部署流程。
是否了解一些高阶的API或三方库,如Slim,tf-learn,tf-layer等。方便快速开发。
是否能够熟练的使用一些可视化工具来更好的训练一个鲁棒性和准确性更强的模型,如tensorboard。
是否能够熟练的使用TensorFlow的分布式环境来提高训练效率,缩短训练时间。
是否了解在生产环境中,基于tensorflow的一些优化方法,比方说怎么对模型文件做剪枝,怎么压缩文件大小等。
- 以上只是针对tensorflow这个框架而言,当然作为算法工程师的前提就是熟悉各类算法的原理和一些经典算法的推理过程。
二、平台工程师
现在各大公司都推出了自己的机器学习平台、深度学习平台等。对于想参与这部分工作的人来说,就需要更加细致的了解tensorflow的架构和各种op的具体实现了,最好的方法就是阅读Tensorflow的源码和参与社区讨论,或者为项目提PR,参与tensorflow框架的开发了。不过题主说自己是算法背景,那这个方向就不过多的赘述。