簡體   English   中英

多標簽圖像分類訓練預訓練 CNN 期間的學習問題

[英]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)

但是我的model什么都沒學到,有問題不知道怎么解決。 這是訓練曲線: 訓練曲線

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM