Python 带有SyncReplicasOptimizer挂钩的MonitoredTrainingSession无法使用占位符初始化

Python 带有SyncReplicasOptimizer挂钩的MonitoredTrainingSession无法使用占位符初始化,python,tensorflow,Python,Tensorflow,我用tf.keras.Input作为输入层构建网络 input\u image=tf.keras.input(shape=(无,无,3),name='input\u image') 按照网络定义,我将优化器定义如下: 然后,我将钩子传递给MonitoredTrainingSession 最后,在运行以创建MonitoredTrainingSession时,占位符会引发以下错误: tensorflow.python.framework.errors\u impl.InvalidArgum

我用tf.keras.Input作为输入层构建网络

input\u image=tf.keras.input(shape=(无,无,3),name='input\u image')

  • 按照网络定义,我将优化器定义如下:

  • 然后,我将钩子传递给MonitoredTrainingSession

  • 最后,在运行以创建MonitoredTrainingSession时,占位符会引发以下错误:

    tensorflow.python.framework.errors\u impl.InvalidArgumentError:必须为带有数据类型float和形状[?,?,?,3]的占位符tensor“input\u image”提供一个值 此异常由
    hook.after\u create\u session(self.tf\u sess,self.coord)调用的
    session\u manager.py
    中的
    ready\u value=sess.run(op)
    引发


  • 对于使用占位符的SyncReplicasOptimizer,我们非常感激。

    终于找到了导致问题的地方: SyncReplicaOptimizer和批处理规范化更新之间的代码存在冲突

    with tf.control_dependencies(update_ops):
        self.train_op = self.optimizer.minimize(self.loss, global_step=self.global_step)
    
    此样式更新将引发异常,但在分离控件依赖项后,同时运行train_op和update_ops可以避免此问题


    但无论如何,我还没有找到解决问题的原因或方法

    通过使用带有默认值的占位符,获得了一个变通解决方案