【语言特性】tf.keras不常见问题汇总

  1. tf.keras同样是mse,但是作为loss和metrics的输出结果不一致。
       可以参见这个问题。其实就是loss根据Batch算的,而metrics算的是全部的,所以metrics计算的是正确的结果。这个bug我看到在github上面提出来过了,据说已经fix了,但是不知道怎么又在tf2.0中出现了。

  2. tf.keras相同模型相同训练集和测试集,相同服务器运行代码,多次的结果对应的最优mse相差比较大。比如可能在0.63~0.67之间波动。
       这个问题在百度没有找到答案,但是在stack overflow还是找到了相似的问题,可以参照问题一问题二,官方也有给一个教程。但是我看了一下觉得对我来说不太可行,seed可以设置,但是non-deterministic操作这个问题解决确实有点困难(这几乎导致了我放弃tf2.0)。后来对比了tf1.13的代码,将网络的初始化改为kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.1, seed=0),后来发现也没太大用。还是要固定随机数种子,就是添加如下代码,并在tf之前掉用就好了。

def set_seed(THATSEED):
    np.random.seed(THATSEED)
    tf.compat.v1.set_random_seed(THATSEED)