[在估计器model_fn中使用keras模型API时无效的参数错误

问题描述 投票:2回答:1

我构建的自定义估算器的model_fn如下所示,

def _model_fn(features, labels, mode):
      """
        Mask RCNN Model function
      """
      self.keras_model = self.build_graph(mode, config)

      outputs = self.keras_model(features) # ERROR STATEMENT
      # outputs = self.keras_model(list(features.values())) # Same ERROR with this statement

      # Predictions
      if mode == tf.estimator.ModeKeys.PREDICT:
        ... # Defining Prediction Spec

      # Training
      if mode == tf.estimator.ModeKeys.TRAIN:
        # Defining Loss and Training Spec
        ...

      # Evaluation
      ...

_model_fn()features接收格式为labelstf.data的参数:

features = {
'a' : (batch_size, h, w, 3) # dtype: float
'b' : (batch_size, n) # # dtype: float
}
# And
labels = []

self.keras_model是使用[tensorflow.keras.models.Model API构建的,带有输入占位符(使用图层tensorflow.keras.layers.Input()定义)的名称'a''b'用于各个形状。

使用train_and_evaluate()运行估算器后,_model_fn运行正常。该图已初始化,但是当训练开始时,我面临以下问题:

tensorflow.python.framework.errors_impl.InvalidArgumentError:您必须用dtype float和shape输入占位符张量'a'的值[?,128,128,3] [[{{{node a}}]]]

我之前使用过自定义估算器,这是第一次使用tensorflow.keras.models.Model中的_model_fn API计算图。

python tensorflow keras tensorflow-estimator
1个回答
0
投票
仅此特定模型(Mask-RCNN)会出现此问题。为了克服这个问题,可以在方法self.build_graph(mode, config)中进行如下修改:

def build_graph(mode, config): # For Input placeholder definition a = KL.Input(tensor=features['a']) # Earlier # a = KL.Input(shape=[batch_size, h, w, 3], name='a') b = KL.Input(tensor=features['b']) # Earlier # b = KL.Input(shape=[batch_size, n], name='b') ... ...

这些修改将特征张量直接包装到tensorflow.keras.layers.Input()中。稍后可以在使用tensorflow.keras.models.Model定义模型时将其用于定义输入自变量。
© www.soinside.com 2019 - 2024. All rights reserved.