TensorFlow 有哪些令人难以接受的地方?

TensorFlow 可谓当前最火的深度学习框架,由于谷歌爸爸的背书而受到无与伦比的赞誉和信任,网上各种教程帖、安利帖不知几何,连 Facebook …
关注者
2,434
被浏览
457,488

72 个回答

上来给TF说句公道话:TF是目前唯一一个在核心设计层面上支持dynamic control flow的框架,也是极少几个经历大规模多应用部署考验的的框架之一。

很多人感觉其他框架好的理由,是它们绕开了实际应用中的限制条件。比如说imperative mode做control flow,很多框架其实并不是自己做control flow,而是利用python来做,框架自己只记录一个static graph。这样的缺点是你没法部署到真正核心的产品里面,一旦要部署,就必须回到static graph去 - 很多产品,比如大规模推荐系统和移动端,是不可能用python的,overhead太大。

所以@吴育昕说得对,要写好的解决方案,哪个框架都要很小心才行。TF的确难,但是它给你提供了真正可以产品化的可能性。对了,当年谁说我是专业TF黑来着?

要相信Jeff Dean大神的眼光还是很不错的,很多问题只看见一棵树的时候简单,看见森林的时候,解决方法就不一样了。

(有同学说最后夹带广告了,所以这一部分我就删掉啦)

自问自答一下,抛砖引玉。

1.默认占用所有GPU的所有内存,非常恶心,难道我们每个人都像谷歌一样有一堆GPU可以用吗?

解决方案:首先是限制tf只能访问一部分GPU:

import os
os.environ[‘CUDA_VISIBLE_DEVICE’] = ‘1,2'

其次是限制在每个可用GPU上占据需要使用的内存大小:

gpu_options = tf.GPUOptions(allow_growth=True)
sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options))  

2.明明有默认的python库argparse可以用,偏偏在很多tf示例代码中使用tf.app.flags这种东西,总觉得被绑架了,事无巨细都要去使用它的模块,即使明明有其他更通用的模块能用。

3.底层接口写起来繁琐,高层接口又不灵活,而且tf的高层封装太多太乱了。相比之下,PyTorch根本就不需要高层封装,直接用底层接口来写就已经很清爽了。

4.速度慢。

5.作为静态图框架,调试困难。是的,我知道有一个tfdbg工具可以调试,但是如果是用PyTorch这样的动态框架的话,就不需要多学一个额外的工具,只需要用正常的Python调试工具如ipdb就可以了。PyTorch配合ipdb可以很方便地在出问题的代码行插一个断点,执行到断点处停止,并进入iPython环境,可以交互式地打印出执行到那行代码的时候各个Tensor的形状、数值等信息,调试起来超级方便。

6.想到更多再继续加。