我用预先训练过的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,仍然不知道发生了什么
目前没有回答
相关问题 更多 >
编程相关推荐