Tensorflow 加载评估结果时,TFMA无法找到Keras模型的指标

Tensorflow 加载评估结果时,TFMA无法找到Keras模型的指标,tensorflow,tensorflow2.0,tf.keras,tensorflow-model-analysis,Tensorflow,Tensorflow2.0,Tf.keras,Tensorflow Model Analysis,我已经培训了一个具有以下服务签名的Keras模型(非估计器): signature_def['serving_default']: The given SavedModel SignatureDef contains the following input(s): inputs['examples'] tensor_info: dtype: DT_STRING shape: (-1) name: serving_default_exam

我已经培训了一个具有以下服务签名的Keras模型(非估计器):

signature_def['serving_default']:
  The given SavedModel SignatureDef contains the following input(s):
    inputs['examples'] tensor_info:
        dtype: DT_STRING
        shape: (-1)
        name: serving_default_examples:0
  The given SavedModel SignatureDef contains the following output(s):
    outputs['mu'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 1)
        name: StatefulPartitionedCall_1:0
    outputs['sigma'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 1)
        name: StatefulPartitionedCall_1:1
  Method name is: tensorflow/serving/predict
在将模型导出为
保存的模型之前,使用带有渐变带的自定义训练循环(而不是
model.fit
方法)更新权重。由于我无法在不首先编译模型的情况下让TFMA工作,因此我在编译模型的同时指定了一组自定义的Keras度量:

model.compile(metrics=custom_keras_metrics)#每个自定义指标都继承自keras.metric
自定义\u训练\u循环(模型)
model.save(“路径/到/保存的模型”,save\u format=“tf”)
我想使用TFMA评估此模型,因此我首先初始化一个eval共享模型,如下所示:

eval\u config=tfma.EvalConfig(
型号规格=[tfma.ModelSpec(label\u key=“my\u label\u key”)],
切片规格=[tfma.SlicingSpec()]#空切片指的是整个数据集
)
eval_shared_model=tfma。默认的_eval_shared_model(“路径/到/保存的_model”,eval_配置=eval_配置)
但是,当我尝试运行模型分析时:

eval\u结果=tfma.run\u模型\u分析(
评估共享模型=评估共享模型,
data_location=“path/to/test/tfrecords*”,
文件\u format=“tfrecords”
)
我面临以下错误:

ValueError回溯(最近一次调用)
在里面
2评估共享模型=评估共享模型,
3 data_location=“tfma/test_raw-*”,
---->4文件格式=“tfrecords”
5 )
~/.pyenv/versions/miniconda3-4.3.30/envs/tensorflow/lib/python3.7/site-packages/tensorflow\u model\u analysis/api/model\u eval\u lib.py in run\u model\u analysis(评估共享模型、评估配置、数据位置、文件格式、输出路径、提取器、求值器、写入器、管道选项、切片规格、写入配置、计算置信区间、最小切片大小、随机种子测试、模式)
1204
1205 if len(评估配置模型规格)1206返回加载评估结果(输出路径)
1207其他:
1208结果=[]
加载评估结果中的~/.pyenv/versions/miniconda3-4.3.30/envs/tensorflow/lib/python3.7/site-packages/tensorflow\u model\u analysis/api/model\u eval\u lib.py(输出路径、模型名称)
383度量\u和\u绘图\u序列化。加载\u和\u反序列化\u度量(
384 path=os.path.join(输出路径、常量、度量值、键),
-->385型号(名称=型号(名称))
386个绘图文件列表=(
387度量\u和\u图\u序列化。加载\u和\u反序列化\u图(
加载和反序列化度量(路径、模型名称)中的~/.pyenv/versions/miniconda3-4.3.30/envs/tensorflow/lib/python3.7/site-packages/tensorflow\u model\u analysis/writers/metrics\u和\u plots\u serialization.py
180 raise VALUERROR('未能找到模型名称:%s的度量值。'
181“可用型号名称为[%s]”%
-->182(型号名称“,”。连接(键)))
183
184 result.append((
ValueError:找不到模型名称的度量值:无。可用模型名称为[]
为什么TFMA会引发此异常,我应该从何处开始调试此错误?我尝试手动指定模型名称(这不应该是必需的,因为我只使用一个模型),但这似乎也没有什么帮助。我尝试跟踪源代码,似乎在TFMA尝试加载ptTransform生成的eval结果时会发生这种情况


我正在使用
tensorflow==2.3.0
tensorflow模型分析==0.22.1

中的
TFMA
常见问题解答应该对您有所帮助。与
度量相关的链接是。谢谢!