[英]Learning problem during training pretrained CNN for multilabel image classification
我正在嘗試訓練 CNN 對 3 類圖像進行分類。 每個圖像可以屬於多個類。 因此,在網絡 output 中,我預計每個 class 的概率。
When I do the data loading I have a pandas dataframe with columns:[imageID, class 1, class 2, class 3]. Images size are (256,256,3) and label is (3,1) (ex: if an image belongs to class 1 and class 2 label is [1,1,0])
然后,這是我的 model:
print("Define model")
base_model = tf.keras.applications.VGG16(include_top=False, input_shape=(256,256,3),weights='imagenet')
base_model.trainable = True
fine_tune_at = 15
for layer in base_model.layers[:fine_tune_at]:
layer.trainable = False
global_average_layer = tf.keras.layers.GlobalAveragePooling2D()
prediction_layer = tf.keras.layers.Dense(3, activation='sigmoid')
inputs = tf.keras.Input(shape=(256,256,3))
x = base_model(inputs, training=False)
x = global_average_layer(x)
x = tf.keras.layers.Dropout(0.2)(x)
outputs = prediction_layer(x)
model = tf.keras.Model(inputs, outputs)
base_learning_rate = 0.00001
model.compile(optimizer=tf.keras.optimizers.Adam(lr=base_learning_rate),
loss=tf.keras.losses.BinaryCrossentropy(from_logits=False), #True
metrics=['accuracy'])
print("Training")
history = model.fit(train_generator, epochs = 75, validation_data= val_generator)
https://www.tensorflow.org/api_docs/python/tf/keras/losses/BinaryCrossentropy
當只有兩個 label 類(假設為 0 和 1)時使用此交叉熵損失。 對於每個示例,每個預測都應該有一個浮點值。
y_true = [[0., 1.], [0., 0.]]
y_pred = [[0.6, 0.4], [0.4, 0.6]]
https://www.tensorflow.org/api_docs/python/tf/keras/losses/CategoricalCrossentropy
當有兩個或多個 label 類時,使用此交叉熵損失 function 。 我們希望以 one_hot 表示形式提供標簽。 如果您想以整數形式提供標簽,請使用 SparseCategoricalCrossentropy 損失。 每個特征應該有 # 個類浮點值。
y_true = [[0, 1, 0], [0, 0, 1]]
y_pred = [[0.05, 0.95, 0], [0.1, 0.8, 0.1]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.