![](/img/trans.png)
[英]why categorical cross entropy loss function in training unet model for multiclass semantic segmentation is very high?
[英]Multiclass Classification model not training properly. Why is the training loss constant?
我正在嘗試使用 keras 訓練 model 以進行多類分類。 有 5 個類別可供預測。 這是一個圖像分類問題,前面提到有五類圖像,卧室、浴室、客廳、餐廳和廚房。 問題是 model 似乎沒有學習,它總是停留在 20% 的准確度上,並且損失從 epoch 1 開始永遠不會改變。我正在使用來自 Xception model 的卷積基礎,上面有我的分類器。 使用 tf.data API 設置訓練、測試和驗證數據集。
有人可以指出我做錯了什么嗎?
這是數據集生成
train_dir = "House_Dataset/Train"
valid_dir = "House_Dataset/Valid"
test_dir = "House_Dataset/Test"
train_ds = trainAug.flow_from_directory(
train_dir,
target_size=(224,224),
shuffle= False,
class_mode= "sparse"
)
valid_ds = image_dataset_from_directory(
valid_dir,
image_size=(224,224),
shuffle=False,
)
test_ds = image_dataset_from_directory(
test_dir,
image_size=(224,224),
shuffle=False,
)
這是異常卷積基的導入。
conv_base = keras.applications.Xception(include_top=False, weights="imagenet", input_shape=(224,224,3))
conv_base.trainable = False
這是 model 構建 function。
def pre_trained():
inputs = keras.Input(shape=(224,224,3))
#x = data_augmentation(inputs)
x = keras.applications.xception.preprocess_input(inputs)
x = conv_base(x)
x = layers.GlobalAveragePooling2D()(x)
x = layers.BatchNormalization()(x)
x = layers.Dropout(0.5)(x)
outputs = layers.Dense(5, activation = "softmax")(x)
model = keras.Model(inputs, outputs)
model.compile(optimizer="rmsprop", loss="sparse_categorical_crossentropy", metrics = ["accuracy"])
return model
培訓 function 來電
history = pre_trained_model.fit(train_ds, epochs=25)
這是時代的圖景。
試試我的 cnn 網絡,看看你是否能得到 87% 的准確率。 cnn 提取每一層的特征作為過濾器。 然后過濾器饋送到類別softmax function。
model=Sequential()
model.add(Conv2D(32, (3,3),activation='relu',input_shape=(IMG_SIZE,IMG_SIZE,3)))
#model.add(Dropout(0.25))
model.add(MaxPooling2D(2))
#model.add(BatchNormalization())
model.add(Conv2D(64, (3,3), activation="relu"))
model.add(MaxPooling2D(2,2))
model.add(Conv2D(128, (3,3), activation="relu"))
model.add(MaxPooling2D(2,2))
model.add(Conv2D(128, (3,3), activation="relu"))
model.add(MaxPooling2D(2,2))
#model.add(BatchNormalization())
model.add(Flatten())
model.add(Dropout(0.2))
model.add(Dense(512,activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics = ['accuracy'])
model.summary()
雖然我還不清楚造成這種情況的確切原因,但我已經找到了問題發生的位置以及解決方案。
我在數據集生成器 function 中添加了一些參數。
train_dir = "House_Dataset/Train"
valid_dir = "House_Dataset/Valid"
test_dir = "House_Dataset/Test"
train_ds = image_dataset_from_directory(
train_dir,
image_size=(224,224),
shuffle= True,
seed=1,
labels="inferred",
label_mode = "categorical"
)
valid_ds = image_dataset_from_directory(
valid_dir,
image_size=(224,224),
shuffle=True,
seed=1,
labels="inferred",
label_mode = "categorical"
)
test_ds = image_dataset_from_directory(
test_dir,
image_size=(224,224),
shuffle=True,
seed=1,
labels="inferred",
label_mode = "categorical"
)
我添加了使用一些種子隨機播放的選項,並將 label 模式更改為分類,這將產生標簽的單熱編碼。 同樣,我還將損失從 sparse_categorical_crossentropy 更改為 categorical_crossentropy。 這些變化使 model 訓練成為可能,並且在訓練和驗證損失以及准確性方面都有顯着改善。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.