【发布时间】:2023-03-10 07:36:01
【问题描述】:
我正在使用 CNN 构建具有定位功能的图像分类器。
我的 CNN 有图像作为输入,但是在最后一个 CONV 层之后,我想将其分成两部分,一部分用于图像分类,下一部分用于图像定位。 不用说一部分应该使用均方误差,另一部分应该使用二进制 binary_crossentropy。我的结构是这样的:
input_image = Input(shape=(IMG_W, IMG_H, 3))
# Layer 1
x = Conv2D(32, (3,3), strides=(1,1), padding='same', name='conv_1', use_bias=False)(input_image)
x = BatchNormalization(name='norm_1')(x)
x = LeakyReLU(alpha=0.1)(x)
# Layer 2
x = Conv2D(64, (3,3), strides=(1,1), padding='same', name='conv_2', use_bias=False)(x)
x = BatchNormalization(name='norm_2')(x)
x = LeakyReLU(alpha=0.1)(x)
现在我想把它分成两个密集(FC)层
class_layer = x
class_layer = Dense(256,activation="relu")(class_layer)
class_layer = Dense(2,activation="softmax")(class_layer)
model_one = Model(input_image,class_layer)
model_one.compile(loss="binary_crossentrophy", optimizer=keras.optimizers.Adam(),metrics=['accuracy'])
图像定位层
x = Dense(1024,activation="relu")(x)
x = Dense(256,activation="relu")(x)
x = Dense(4,activation="relu")(x)
model = Model(input_image,x)
model.compile(loss="mean_squared_error", optimizer=keras.optimizers.Adam(),metrics=['accuracy'])
但是,我如何连接图层,使结果向量为 (2 + 4)? 我什至可以实现这样的分裂吗?
我知道model.concatenate 但是这应该在编译之前调用,所以每个部分不会有不同的损失函数
感谢您的帮助和回答
【问题讨论】:
标签: python machine-learning neural-network keras conv-neural-network