2 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊
請(qǐng)您修改如下代碼并嘗試執(zhí)行
從:
predictions = Dense(num_classes, activation= 'sigmoid')(x)
至:
predictions = Dense(num_classes, activation= 'softmax')(x)
從:
model.compile(optimizer= adam, loss='binary_crossentropy', metrics=['accuracy',precision_m,recall_m])
至:
model.compile(optimizer= adam, loss='categorical_crossentropy', metrics=['accuracy',precision_m,recall_m])

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊
這個(gè)問題已經(jīng)很老了,但如果它對(duì)其他人有幫助,我會(huì)回答它:
在此示例中,您凍結(jié)了除最后兩個(gè)層(全局平均池化和最后一個(gè)密集層)之外的所有層。有一種更簡(jiǎn)潔的方法可以達(dá)到相同的狀態(tài):
rn50 = applications.resnet50.ResNet50(weights='imagenet', include_top=False, input_shape=(img_height, img_width, 3))x = rn50.outputx = GlobalAveragePooling2D()(x)predictions = Dense(num_classes, activation= 'sigmoid')(x)model = Model(inputs = base_model.input, outputs = predictions)rn50.trainable = False # <- thismodel.compile(...)
在這種情況下,從 ResNet50 網(wǎng)絡(luò)中提取特征并饋送到線性 softmax 分類器,但沒有訓(xùn)練 ResNet50 的權(quán)重。這稱為特征提取,而不是微調(diào)。
唯一正在訓(xùn)練的權(quán)重來自您的分類器,該分類器是用從隨機(jī)分布中提取的權(quán)重實(shí)例化的,因此應(yīng)該完全訓(xùn)練。您應(yīng)該使用 Adam 的默認(rèn)學(xué)習(xí)率:
model.compile(optimizer=tf.optimizers.Adam(learning_rate=0.001))
所以你可以訓(xùn)練它幾個(gè)時(shí)期,一旦完成,你就可以解凍主干并“微調(diào)”它:
backbone.trainable = Falsemodel.compile(optimizer=tf.optimizers.Adam(learning_rate=0.001))model.fit(epochs=50)backbone.trainable = Truemodel.compile(optimizer=tf.optimizers.Adam(learning_rate=0.00001))model.fit(epochs=60, initial_epoch=50)
Keras 網(wǎng)站上有一篇很好的文章:https ://keras.io/guides/transfer_learning/
添加回答
舉報(bào)