这就有点类似 TF1.x 时代各种各样的 API 混杂的情况——同一个功能可以由不同的 API 实现。但是,在不同的功能 API 进行组合的时候,某些 API 之间可能不兼容。
例如,我使用了 tf.keras,以 model = tf.keras.Sequential 的方式构建了一个网络,它的 training loop 是什么样的?我应该使用 model.fit() 吗?还是 with tf.GradientTape() as Tape ? 如果我想要自定义损失函数中某个标签的损失,我该在哪里修改?
多余的 API 增加了额外的学习成本,自然就让用户产生很多新的疑问。而这些疑问和错误如果没有及时解决,就会让用户丧失使用这个框架的兴趣。