set GPU to TCC mode in windows to use every bit of the GPU ram 【 在 lixilinx () 的大作中提到: 】 : 明年打算切换到tf2试一试。 : pytorch在windows里总比linux里慢一点,同样的GPU,pytorch能用的RAM在windows里 : 也比linux里少一点,好像也不是我自己的机器独有的issue。简单的operation,写成 : inplace的和不是inplace的,加不加@jit,运算的速度有时区别还是很明显的。 : tf里面的tensor calculation只能是一根筋式的写法,有时很麻烦,但少操心些,虽然 : 最后也不比pytorch快多少。 : 这两个frameworks的出发点相差这么大,现在都变得半斤八两了。
这几天在update自己的那个psgd包,感觉告一段落了,总结一下浅显的经验所得。
tf 1x: 静态图,难写难调,文档API混乱。特别是tf.while_loop和TensorArray用起
来别扭又容易出bug,而且还不支持高阶导数,后来我干脆切换到pytorch了。
pytorch: API和文档比tf稳定,eager excution,易用。TorchScript也可支持静态图(@torch.jit.script),还可以通过tracing的方式来产生静态图。
tf 2x: 我感觉tf 2x基本上在copy pytorch的模式,支持eager excution和通过
tracing来产生静态图,Keras和torch.nn.Module也大同小异。文档易用性等各方面都
得到了改善,基本不需要写tf.cond和tf.while_loop那些死套路。但这个静态图(@tf.
function)是通过tracing自动产生的,不像tf 1x那里由用户自己写出来的,因此这里
面可能隐藏些坑。
eager mode speed comparison: 对于标准的模块,pytorch和tf的速度没有明显区别
;对于自定义的写法,常常pytorch明显快多了,有时tf慢到几乎没法使用的地步。
static graph mode speed comparison: 同样,对于标准的模块,pytorch和tf的速度没有明显区别;对于自定义的写法,大部分情况下tf快一些,pytorch的code如果写得
比较讲究,这个speed differnce一般不会超过两倍,否则Pytorch可能慢很多。
静态图生成方式对比: pytorch的可以用TorchScript来写,也可以通过tracing的方式来从完全Python的写法的code中trace出来一个静态图,感觉目前主要只能优化些
element-wise的操作,因此优化的效果有限。tf的静态图完全是通过tracing的方式来
产生的,由于tf本身只支持一些特定的操作(比如不能随意改变一个tensor的slice的
值),因此这个优化力度可以很大。这里的问题是,默认情况下tf可能会trace出大量
的静态图,比如一个tensor的shape变一下就需要一个新的graph,函数里面如果有纯
python的控制分支,每一个分支就需要去trace一个新的的graph,dtype变一下也需要
retrace,为了避免不必要的retracing,最终还得是tf 1x的写法才行得通。
总的感觉是pytorch从dynamic graph出发,很容易写,也支持静态图,但优化力度有限。tf 2x的eager mode容易上手,但对于自定义的模型,还得是tf 1x的写法才可行,需要知道tf语言的很多细节,比如dynamic vs static(e.g., tf.shape(tensor) vs
tensor.shape),tf.cond的分支返回值和loop每一步的值必须是同类型同size的,只
有这些很特定的写法才支持,这也是为什么tf能比pytorch快一点。
赞。
另外问问, 深学这一套在市场上目前应用广泛么 ? 图像处理,无人驾驶高端应用肯
定有,但并不普及啊。
怕进了这个坑以后用不上。
nice总结。
为啥不tf2+keras?
【 在 lixilinx () 的大作中提到: 】
: 这几天在update自己的那个psgd包,感觉告一段落了,总结一下浅显的经验所得。
: tf 1x: 静态图,难写难调,文档API混乱。特别是tf.while_loop和TensorArray用起
: 来别扭又容易出bug,而且还不支持高阶导数,后来我干脆切换到pytorch了。
: pytorch: API和文档比tf稳定,eager excution,易用。TorchScript也可支持静态图
: (@torch.jit.script),还可以通过tracing的方式来产生静态图。
: tf 2x: 我感觉tf 2x基本上在copy pytorch的模式,支持eager excution和通过
: tracing来产生静态图,Keras和torch.nn.Module也大同小异。文档易用性等各方面都
: 得到了改善,基本不需要写tf.cond和tf.while_loop那些死套路。但这个静态图(@tf.
: function)是通过tracing自动产生的,不像tf 1x那里由用户自己写出来的,因此这里
: 面可能隐藏些坑。
: ...................
我捣鼓的东西也和这些高大上的沾不上边,数值自动微分也不是什么新鲜的东西。但像pytorch和tf这样完整的tool还是很有用途的。比如很多data processing的pipeline里面有些模块很难找到简单又准确的parametric model,如果你换成一个nonparametric model,并且目标函数对model的参数可微分,这时用数值自动微分的工具就可能拟合出一个更好的model。有点像在Reinforcement learning里面用神经网络来替代piece-
wise linear的函数来近似value function,不同的是这里目标函数对model的参数不可微分,但做法上类似。类似这些小东西还是有一些的,数值自动微分是一个handy的
tool。
【 在 magliner (magliner) 的大作中提到: 】
: 赞。
: 另外问问, 深学这一套在市场上目前应用广泛么 ? 图像处理,无人驾驶高端应用肯
: 定有,但并不普及啊。
: 怕进了这个坑以后用不上。
Keras对我太高级了,好多东西改不了。在Keras这个level,pytorch一样快,还更灵活。
【 在 goodtudou (goodtudou) 的大作中提到: 】
: nice总结。
: 为啥不tf2+keras?
明年打算切换到tf2试一试。
pytorch在windows里总比linux里慢一点,同样的GPU,pytorch能用的RAM在windows里
也比linux里少一点,好像也不是我自己的机器独有的issue。简单的operation,写成
inplace的和不是inplace的,加不加@jit,运算的速度有时区别还是很明显的。
tf里面的tensor calculation只能是一根筋式的写法,有时很麻烦,但少操心些,虽然最后也不比pytorch快多少。
这两个frameworks的出发点相差这么大,现在都变得半斤八两了。
set GPU to TCC mode in windows to use every bit of the GPU ram
【 在 lixilinx () 的大作中提到: 】
: 明年打算切换到tf2试一试。
: pytorch在windows里总比linux里慢一点,同样的GPU,pytorch能用的RAM在windows里
: 也比linux里少一点,好像也不是我自己的机器独有的issue。简单的operation,写成
: inplace的和不是inplace的,加不加@jit,运算的速度有时区别还是很明显的。
: tf里面的tensor calculation只能是一根筋式的写法,有时很麻烦,但少操心些,虽然
: 最后也不比pytorch快多少。
: 这两个frameworks的出发点相差这么大,现在都变得半斤八两了。
Thanks!Will try on the next windows machine。
好像有些GPU不支持TCC?以前试过在windows上从source code编译出来的Pytorch也比
直接安装的快一点。因此后来就再也没有在windows下用过pytorch,pytorch在Linux上完全没有这些小毛病。
【 在 Liber8 (Space-Time continuum) 的大作中提到: 】
: set GPU to TCC mode in windows to use every bit of the GPU ram
艾玛, 自动微分,符号计算可是我版顾老的‘一亩三分地’,在我看来就是天书一样
的存在。
深学这坑看来不适合普通人。
【 在 lixilinx () 的大作中提到: 】
: 我捣鼓的东西也和这些高大上的沾不上边,数值自动微分也不是什么新鲜的东西。但像
: pytorch和tf这样完整的tool还是很有用途的。比如很多data processing的pipeline里
: 面有些模块很难找到简单又准确的parametric model,如果你换成一个
nonparametric
: model,并且目标函数对model的参数可微分,这时用数值自动微分的工具就可能拟合出
: 一个更好的model。有点像在Reinforcement learning里面用神经网络来替代piece-
: wise linear的函数来近似value function,不同的是这里目标函数对model的参数不可
: 微分,但做法上类似。类似这些小东西还是有一些的,数值自动微分是一个handy的
: tool。
深学发展到现在,调参侠已经渐渐地往普通工具人靠了。现在的大佬都是往数学深处钻,未来头部赛道会越来越窄。
我一做infra的普通人只能望洋兴叹,跟着混口汤喝。
【 在 magliner (magliner) 的大作中提到: 】
: 艾玛, 自动微分,符号计算可是我版顾老的‘一亩三分地’,在我看来就是天书一样
: 的存在。
: 深学这坑看来不适合普通人。
: nonparametric
你可能搞混了symbolic自动微分和numerical自动微分。symbolic自动微分是真的难,
numerical自动微分是真的简单。
就像你定义一个前向函数x*x,你再写一个反向的函数告诉程序这个函数的导数是2*x即可。你甚至也不需要知道前向和后向函数的解析表达式,只需要告诉程序这两个函数是怎么算的即可,即numerical。这些串起来就可以numerical自动微分了。tf之前有很多这样的小tool,但没有一个像tf和pytorch这么solid的。
【 在 magliner (magliner) 的大作中提到: 】
: 艾玛, 自动微分,符号计算可是我版顾老的‘一亩三分地’,在我看来就是天书一样
: 的存在。
: 深学这坑看来不适合普通人。
: nonparametric
1.
除了几个hello world的例子。我从未用过DL。最多也就看看资料和benchmark。
2.
自动微分不是symbolic computation。
3.
如果需要用Ann,我有自己20年前的技术。
4.
深学不是不好。但是几年前我就知道。市场的拥挤程度是指数上升的。
【 在 magliner(magliner) 的大作中提到: 】
<br>: 艾玛, 自动微分,符号计算可是我版顾老的‘一亩三分地’
,在我看来就是天
书一样
<br>: 的存在。
<br>: 深学这坑看来不适合普通人。
<br>: nonparametric
<br>
深学的兴起的原因就是数学发展太慢了,数学好的人不多。深学最适合对数学有些兴趣但基础或者天赋有限的,工程能力比较强的人搞
【 在 magliner (magliner) 的大作中提到: 】
: 艾玛, 自动微分,符号计算可是我版顾老的‘一亩三分地’,在我看来就是天书一样
: 的存在。
: 深学这坑看来不适合普通人。
: nonparametric
微分其实还好。积分代数类似于无人区。
链式求导,泊松括号什么的都是微分。其代数性质研究的人很多。
分步积分法的代数性质研究的人非常少。
【 在 lixilinx() 的大作中提到: 】
: 你可能搞混了symbolic自动微分和numerical自动微分。symbolic自动微分是真
的难,
: numerical自动微分是真的简单。
: 就像你定义一个前向函数x*x,你再写一个反向的函数告诉程序这个函数的导数
是2*x即
: 可。你甚至也不需要知道前向和后向函数的解析表达式,只需要告诉程序这两个函数是
: 怎么算的即可,即numerical。这些串起来就可以numerical自动微分了。tf之前有很多
: 这样的小tool,但没有一个像tf和pytorch这么solid的。
神学实证过硬,这没话说。
图片大家都知道。
再例如机器翻译,目前没有别的better办法。
near future我认为也找不到别的办法。
不说benchmark分数。
我以前用过google translate。也用过图片搜索。
巨大进步能清晰的感觉到。
但是并非所有的分类问题都适合神学。
【 在 lightroom (吃一条鱼,思考一个问题,法号三丰) 的大作中提到: 】
: 深学的兴起的原因就是数学发展太慢了,数学好的人不多。深学最适合对数学有些兴趣
: 但基础或者天赋有限的,工程能力比较强的人搞
目前tf和pytorch能解决的数值微分问题都是一个链式法则就能解决的,网络里面不能
有代数闭环或更复杂的数学操作在里面。很难想象人的思维会是这样简单线性的。当但数据、人工标注、计算资源等这些规模上去后,深学的结果又表现得很convincing,似是而非...
觉得end-to-end train就像个无底洞,大部分人根本玩不起。我现在使用神经网络都是一种很constrained的方式,这个网络可能是一个大的signal processing pipeline的
一小部分,满足某些plausible的限制,整个pipeline是explainable的,这样尽量用更少的训练数据来达到八九不离十的效果。
DL在几个领域或者几个类型问题有实证巨大突破,这点没疑问。
但是实践中,目前来看,更多类型的问题,是boost类型算法的结果更加convincing。
不是DL。
ANN是另一回事。ANN非常庞杂。古代什么类型的ANN都有。
【 在 lixilinx () 的大作中提到: 】
: 目前tf和pytorch能解决的数值微分问题都是一个链式法则就能解决的,网络里面不能
: 有代数闭环或更复杂的数学操作在里面。很难想象人的思维会是这样简单线性的。当但
: 数据、人工标注、计算资源等这些规模上去后,深学的结果又表现得很convincing,似
: 是而非...
: 觉得end-to-end train就像个无底洞,大部分人根本玩不起。我现在使用神经网络都是
: 一种很constrained的方式,这个网络可能是一个大的signal processing pipeline的
: 一小部分,满足某些plausible的限制,整个pipeline是explainable的,这样尽量用更
: 少的训练数据来达到八九不离十的效果。
對數學有興趣的人怎麼可能忍受深學這種瞎攢結果外加暴力狂算的行爲方式?
搞數學的人連統計方向都覺得噁心,但是話說回來,搞統計的人和現在這波深學比起來,感覺成純數學了。
說白了,都是錢,但是其實深學這個行業的錢爲什麼這麼多可能大部分人並沒有想清楚。
【 在 lightroom (吃一条鱼,思考一个问题,法号三丰) 的大作中提到: 】
: 深学的兴起的原因就是数学发展太慢了,数学好的人不多。深学最适合对数学有些兴趣
: 但基础或者天赋有限的,工程能力比较强的人搞
brutal force体现在深学的方方面面: 大数据、海量计算资源、over
parameterization等。但有些很小的问题brutal force也行不通。就像这个很单纯的
delayed XOR RNN learning problem:
event A is true or false; after some lags, event B is true or false; then
predict XOR(A, B)。
lag足够大,用一阶的方法,lstm也搞不定;用二阶的方法,vanilla rnn也能搞定。