我在Ubuntu 16.04中使用Keras 2.0.8和Tensorflow 1.3.0,使用Cuda 8.0和cuDNN 6 .
我在我的模型中使用两个BatchNormalization图层( keras layers )并使用 tensorflow pipeline 进行训练 .
我在这里遇到两个问题 -
-
BatchNorm图层 population parameters (均值和方差)即使在将 K.learning_phase 设置为 True 之后也进行了训练 not being updated . 结果,推断完全失败 . 我需要一些关于如何在手动训练步骤之间更新这些参数的建议 .
-
其次,在 saving the trained model 之后使用tensorflow saver 操作,当我尝试 load 时, results cannot be reproduced . 看来 weights are changing . 有没有办法在保存 - 加载操作中保持相同的权重?
1 回答
几个星期前我遇到了同样的问题 . 在内部,keras层可以向模型添加额外的更新操作(例如batchnorm) . 因此,您需要显式运行这些额外的操作 . 对于batchnorm,这些更新似乎只是一些assign_ops,它将当前均值/方差与新值交换 . 如果你不创建keras模型,这可能会起作用;假设x是张量,你想要标准化
在我的工作流程中,我正在创建一个keras模型(没有编译它),然后运行以下
输入可以是类似的东西
和输出是张量流量张量的列表 . 该模型似乎自动聚合输入和输出之间的所有其他更新操作 .