我正在嘗試使用 keras 訓練模型以進行多類分類。有 5 個類別可供預測。這是一個影像分類問題,前面提到有五類影像,臥室、浴室、客廳、餐廳和廚房。問題是模型似乎沒有學習,它總是停留在 20% 的準確率上,并且損失從 epoch 1 開始永遠不會改變。我正在使用 Xception 模型中的卷積基礎和我的分類器。訓練、測驗和驗證資料集是使用 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
這是模型構建功能。
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
訓練函式呼叫
history = pre_trained_model.fit(train_ds, epochs=25)
這是時代的圖景。

uj5u.com熱心網友回復:
雖然我還不清楚造成這種情況的確切原因,但我已經找到了問題發生的位置以及解決方案。
我在資料集生成器函式中添加了一些引數。
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"
)
我添加了使用一些種子隨機播放的選項,并將標簽模式更改為分類,這將產生標簽的單熱編碼。同樣,我還將損失從 sparse_categorical_crossentropy 更改為 categorical_crossentropy。這些變化允許模型訓練,并且在訓練和驗證損失以及準確性方面都有顯著改善。

uj5u.com熱心網友回復:
試試我的 cnn 網路,看看你是否能得到 87% 的準確率。cnn 提取每一層的特征作為過濾器。然后過濾器饋送到類別 softmax 函式。
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(5, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics = ['accuracy'])
model.summary()
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/417930.html
標籤:
