正在尝试构建具有多个输出的TF2模型,但get InvalidArgumentError:无法压缩dim[1],应为维度1,而get 8

2024-09-30 01:24:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我用预先训练过的resnet50建立了一个模型

这是我的密码

resnet50 = keras.applications.resnet.ResNet50(include_top=False,weights='imagenet',input_shape=(224,224,3))

#resnet50.summary()
resnet50.trainable = False

model = keras.Sequential([
    resnet50,
    keras.layers.GlobalAveragePooling2D(),
    keras.layers.Dense(8,activation='softmax',name='output1')
    ])

model.summary()

IMGSZ = 224
input_image = keras.layers.Input((IMGSZ,IMGSZ,3),dtype=tf.float32)
x = model.layers[0](model.input)
x = keras.layers.GlobalAveragePooling2D()(x)
output = keras.layers.Dense(2,activation='softmax',name='output2')(x)
model2 = keras.models.Model(inputs=model.input,outputs=[model.output,output])
model2.summary()

base_learning_rate = 0.001
model2.compile(optimizer=tf.keras.optimizers.Adam(lr=base_learning_rate),
             loss={'output1':'categorical_crossentropy','output2':'categorical_crossentropy'},
             metrics=['accuracy'])

hsitory = model2.fit(aug_db,epochs=1000,steps_per_epoch=200)

aug_db是一个迭代器,它将返回 图像(322442444,3)、类别(32,8)和另一类别(32,2)

任务是尝试识别图像类别和位置类别 但是我弄错了

InvalidArgumentError:  Can not squeeze dim[1], expected a dimension of 1, got 8
     [[node categorical_crossentropy/weighted_loss/Squeeze (defined at <ipython-input-61-98d8531d42d0>:27) ]] [Op:__inference_train_function_398664]

Function call stack:
train_function

我试图将一个随机张量(1224224,3)传递给模型2

并尝试从aug_db获取图像,然后将其传递给model2,然后正确计算model2输出和aug_db类别之间的损失

但是当我使用model.fit()时,它会得到上面的错误

我认为这是因为model.compile()中的丢失

我已经检查了输出和aug_db,仍然不知道发生了什么


Tags: 图像inputoutputdbmodellayerssummary类别

热门问题