V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lunafreya
V2EX  ›  TensorFlow

对于 TensorFlow 2.0 的 Keras API, 大家怎么看

  •  
  •   lunafreya · 2019-05-05 10:29:45 +08:00 · 6642 次点击
    这是一个创建于 2021 天前的主题,其中的信息可能已经有所发展或是发生改变。

    其实现在 TensorFlow 1.13 版已经有大量 tf.keras 的 API 了, 我尝试将 MobileNet V2 用 keras 那套 subclassing 方法写了一遍。 发现无论怎样操作都无法把 tf.keras.layers 里 Batch Normalization 的 running mean 以及 running variance 加进 UpdateOps 这个 Collection, 同时,类似这种情况含有 regularization 的 Conv2D 中也不会把 regularization 加进 regularization loss collection 里。 查了下 GitHub 上相关的 issue, 有人说用 keras 那套 model.compile 和 model.fit 来进行 training 可以 update 这些。 这是不是意味着以后习惯静态图的玩家基本就没有框架可用了。

    5 条回复    2019-05-05 11:13:50 +08:00
    ipwx
        1
    ipwx  
       2019-05-05 10:47:45 +08:00
    1、是的,静态图已经没有市场了。Collection 已经在 2.0 消失了。
    2、但是其实没有太大问题,你只要改一改习惯就好了。。。

    我去年也写了个库,写深度生成模型的,接下来也得大改,哭瞎。不过其实仔细想想,是改的了的。

    https://github.com/haowen-xu/tfsnippet
    ipwx
        2
    ipwx  
       2019-05-05 10:56:18 +08:00   ❤️ 1
    另外 TF 2.0 的 API 和 PyTorch 其实很接近了,如果你有心,是可以写个兼容层的。。。

    TF 2.0 替代全局 collection 的是可以直接递归从根组件收集各种对象,比如 update ops,比如 regularization loss。
    ----

    其实你们 Keras 党还好啦,没有多少变更。我作为 tf.layers 党才蛋疼呢。。。

    写 Bayesian 网络的时候,每个概率式子都是一个子网络,算上概率分布的参数还得有更多。一个 x,y,z 三变量的网络就得有 6 个子隐藏网络 + 四个高斯分布各两个独立的线性激活层,统共 14 个组件。(比如 HVAE https://arxiv.org/abs/1705.07120 )。如果按照 Keras 的做法,你得在构造函数里面创建 14 个独立的对象,然后在合适的地方调用,简直太坑爹了。

    如果用上 reuse + tf.layers,只要在构造网络的时候写一遍就行了。

    比如我的库写的 p(x,y,z) = p(x|z) p(z|y) 三变量的 p 网络: https://github.com/haowen-xu/tfsnippet/blob/develop/tfsnippet/examples/auto_encoders/gm_vae.py#L144
    再比如别人用 PyTorch 写的 p(x,z1,z2) = p(x|z1,z2) p(z1|z2) 三变量的 p 网路: https://github.com/jmtomczak/vae_vampprior/blob/master/models/HVAE_2level.py#L225

    哪个简洁,一目了然。
    ----

    可惜的是,Bayesian net 不是主流,被默默地忽视了。明明 reuse 在这个场景下超级有用的。
    ipwx
        3
    ipwx  
       2019-05-05 10:59:21 +08:00
    而且讲道理我本来是想今年完善文档然后发布一下我这个库,写个小论文的(我这库可以写 Bayesian net + flow model + pixelcnn,再加个 gan 的画就能四项全能了,目前还没有这么完整能写 deep generative model 的库,大多只能写某一类)。结果 TF 2.0 大改。。。( OTZ )
    rayhy
        4
    rayhy  
       2019-05-05 11:08:23 +08:00
    tf 的版本太多了,而且各种不兼容,早期写的 tf 的代码现在要想再用得脱层皮。最近搞毕设接触非得用到 tf 的代码,不知道该骂 tf 还是骂自己笨,疯了。

    pytorch 早期的代码现在再用就基本没甚问题,要改也是.data[0]改成.item()就差不多没了。
    tottea
        5
    tottea  
       2019-05-05 11:13:50 +08:00
    @ipwx 拜见大佬。。。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5504 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 08:42 · PVG 16:42 · LAX 00:42 · JFK 03:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.