1 回答

TA貢獻1817條經驗 獲得超14個贊
這里有一些你可以嘗試的事情。您可以通過更改 train_gen 來消除 Lambda 層,如下所示
rescaled3D_gen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255, zoom_range=0.2,shear_range=0.2, horizontal_flip=True,
preprocessing_function=tf.keras.applications.mobilenet_v2.preprocess_input)
您不需要 Lamda 調整大小圖層,因為您在目錄流中指定了目標大小。在 val_gen 中,您有 shuffle=True。這將打亂每個時期的驗證圖像順序。為了保持一致性,最好將其設置為 False。在 mobilenet 的代碼中,您有 include_top=True 和 pooling='avg' 當 include_top 為 True 時,池參數將被忽略。設置 include_top=True 會使模型的頂層具有 1000 個節點的密集層和 softmax 激活函數。我會設置 include_top=False。這樣,mobilenet 的輸出就是一個全局池化層,可以直接為您的密集分類層提供數據。在生成器中設置 class_mode='binary'。但在 model.compile 中,您將損失設置為稀疏_分類_交叉熵。這可以工作,但使用 loss=BinaryCrossentropy 進行編譯會更好。為了保持一致性,最好每個時期只檢查一次驗證樣本。為此,應選擇批量大小,使驗證樣本/batch_size 為整數,并使用該整數作為驗證步驟數。下面的代碼將為您做到這一點。
b_max=80 # set this to the maximum batch size you will allow based on memory capacity
length=val_gen.samples
batch_size=sorted([int(length/n) for n in range(1,length+1) if length % n ==0 and length/n<=b_max],reverse=True)[0]
val_steps=int(length/batch_size)
更改驗證批量大小可能會改變驗證損失和準確性的結果。一般來說,較大的批量大小會導致損失波動較小,但可能會導致陷入局部最小值的可能性較高。嘗試這些更改,看看結果的差異是否較小。
添加回答
舉報