Python 在估计器模型内使用keras模型API时参数错误无效\u fn

Python 在估计器模型内使用keras模型API时参数错误无效\u fn,python,tensorflow,keras,tensorflow-estimator,Python,Tensorflow,Keras,Tensorflow Estimator,我构建的自定义估计器的模型\u fn如下所示 def_model_fn(功能、标签、模式): """ 掩码RCNN模型函数 """ self.keras_model=self.build_图(模式,配置) 输出=self.keras_模型(特征)#错误声明 #outputs=self.keras_model(list(features.values())#此语句存在相同错误 #预言 如果mode==tf.estimator.ModeKeys.PREDICT: ... # 定义预测规范 #训练 如

我构建的自定义估计器的
模型\u fn
如下所示

def_model_fn(功能、标签、模式):
"""
掩码RCNN模型函数
"""
self.keras_model=self.build_图(模式,配置)
输出=self.keras_模型(特征)#错误声明
#outputs=self.keras_model(list(features.values())#此语句存在相同错误
#预言
如果mode==tf.estimator.ModeKeys.PREDICT:
... # 定义预测规范
#训练
如果模式==tf.estimator.ModeKeys.TRAIN:
#定义损耗和培训规格
...
#评价
...
\u model\u fn()
tf接收参数
功能
标签
。数据
格式如下:

功能={
“a”:(批量大小,h,w,3)#数据类型:浮点
“b”:(批量大小,n)##数据类型:浮动
}
#及
标签=[]
self.keras\u模型
是使用
tensorflow.keras.models.model
API构建的,该API带有输入占位符(使用图层
tensorflow.keras.layers.Input()
),其名称分别为
'a'
'b'

使用
训练和评估()运行估计器后,
\u模型fn
运行良好。图表已初始化,但当培训开始时,我面临以下问题:

tensorflow.python.framework.errors\u impl.InvalidArgumentError:您必须 使用dtype float和shape为占位符张量“a”输入一个值 [?,128128,3][{{{node a}}]]


我以前使用过自定义估计器,这是我第一次使用
API在
\u Model\fn
中计算图形。

这个问题只发生在这个特定的模型(Mask RCNN)上。为了克服这个问题,可以对方法
self.build\u graph(mode,config)
进行如下修改:

def构建图(模式、配置):
#用于输入占位符定义
a=KL.输入(张量=特征['a'])
#早些时候
#a=KL.Input(形状=[批次大小,h,w,3],名称='a')
b=KL.输入(张量=特征['b'])
#早些时候
#b=KL.Input(形状=[批次大小,n],名称='b')
...
...

这些修改将特征张量直接包装到
tensorflow.keras.layers.Input()
中。在使用
tensorflow.keras.models.Model定义模型时,可以使用它来定义输入参数

此问题仅在该特定模型(掩码RCNN)中出现。为了克服这个问题,可以对方法
self.build\u graph(mode,config)
进行如下修改:

def构建图(模式、配置):
#用于输入占位符定义
a=KL.输入(张量=特征['a'])
#早些时候
#a=KL.Input(形状=[批次大小,h,w,3],名称='a')
b=KL.输入(张量=特征['b'])
#早些时候
#b=KL.Input(形状=[批次大小,n],名称='b')
...
...

这些修改将特征张量直接包装到
tensorflow.keras.layers.Input()
中。以后在使用tensorflow.keras.models.Model定义模型时,可以使用它来定义输入参数。请显示用于构建模型的代码。我猜您是将此
功能
dict直接放在输入节点
a
,该节点应使用张量而不是dict。我使用的是官方提供的MaskRCNN模型具有7个输入和7个输出的存储库。请参考本官方报告中的
build()
方法@zongfan是否有办法将
功能中的张量输入
tf.keras.models.Model
?@SWAPNILMASUREKAR
tf.keras.models()
仅接受keras张量。如果你想输入一个dict而不是张量,以以下方式包装继承此官方模型类的自定义模型类:。请显示用于构建模型的代码。我猜您将此
功能
dict直接放置到输入节点
a
,该节点应使用张量而不是dict。我使用的是官方存储库中的MaskRCNN模型,包含7个输入和7个输出。请参考本官方报告中的
build()
方法@zongfan是否有办法将
功能中的张量输入
tf.keras.models.Model
?@SWAPNILMASUREKAR
tf.keras.models()
仅接受keras张量。如果要输入dict而不是张量,请包装一个自定义模型类,该类以以下方式继承此官方模型类:。