Tensorflow TFF:ValueError检查模型目标时出错

Tensorflow TFF:ValueError检查模型目标时出错,tensorflow,tensorflow-federated,Tensorflow,Tensorflow Federated,我想用tensorflow federated实现一个图像分类代码,所以当我创建模型并将其传递给federated averaging process时,我发现了我无法理解的错误。下面是我用TFF实现的代码的一部分 input_shape=(224,3) def create_编译的_keras_模型(输入_形状,base_model='resnet18'): 输入=tf.keras.layers.Input(形状=(输入形状)) 基本编码器=tf.keras.applications.ResN

我想用tensorflow federated实现一个图像分类代码,所以当我创建模型并将其传递给federated averaging process时,我发现了我无法理解的错误。下面是我用TFF实现的代码的一部分

input_shape=(224,3)
def create_编译的_keras_模型(输入_形状,base_model='resnet18'):
输入=tf.keras.layers.Input(形状=(输入形状))
基本编码器=tf.keras.applications.ResNet50(
包括_top=False,权重=None,输入_tensor=None,
输入(shape=None,pooling='avg')
基本编码器训练=真
h=基本编码器(输入)
x=tf.keras.layers.致密(2)(h)
x=tf.keras.layers.Activation('relu')(x)
x=tf.keras.layers.致密(2)(x)
model=tf.keras.model(输入=输入,输出=[h,x])
model.compile(
优化器=tf.keras.optimizers.SGD(学习率=0.001),
损失=tf.keras.loss.CategoricalCrossentropy(),
metrics=[tf.keras.metrics.CategoricalAccuracy()])
回归模型
def型号_fn():
keras\u模型=创建\u编译的\u keras\u模型(输入\u形状,基本\u模型='resnet18')
返回tff.learning.from_编译的keras_模型(keras_模型,样本批次)
迭代过程=tff.learning.build联合平均过程(模型=fn,服务器=fn=lambda:tf.keras.optimizers.SGD(学习率=1.0),客户机=None)
错误是:

ValueError: Error when checking model target: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 2 array(s), for inputs ['resnet50', 'dense_1'] but instead got the following list of 1 arrays: [<tf.Tensor 'Const_1:0' shape=(2, 2) dtype=float32>]...
ValueError:检查模型目标时出错:传递给模型的Numpy数组列表的大小不是模型预期的大小。预计将看到2个数组,用于输入['resnet50','densite_1'],但得到了以下1个数组的列表:[。。。

谢谢你的帮助

如果直接在
样本批
上调用模型,例如
创建已编译的keras模型()。在样本批(样本批)上测试,是否会发生错误?由于模型由两个输出构成,因此代码需要确保
sample\u batch
有两个标签。是的,你是对的,那么解决方案是什么?我必须改变模型的输出,知道h是base_编码器,x是投影头?如果问题扩展到解释预期的模型架构,这将有所帮助。图像分类可以在不向输出中添加编码器的情况下实现,但这就是目标吗?在这种情况下,输入数据必须包含
h
x
的训练目标,如果使用的是MNIST数据集,则可能只有
x
的标签存在。是否可以简单地从输出中删除
h
?如果直接在
sample\u batch
上调用模型,例如
create\u compiled\u keras\u model()?由于模型由两个输出构成,因此代码需要确保
sample\u batch
有两个标签。是的,你是对的,那么解决方案是什么?我必须改变模型的输出,知道h是base_编码器,x是投影头?如果问题扩展到解释预期的模型架构,这将有所帮助。图像分类可以在不向输出中添加编码器的情况下实现,但这就是目标吗?在这种情况下,输入数据必须包含
h
x
的训练目标,如果使用的是MNIST数据集,则可能只有
x
的标签存在。是否可以简单地从输出中删除
h