1 回答

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超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 調(diào)整大小圖層,因?yàn)槟谀夸浟髦兄付四繕?biāo)大小。在 val_gen 中,您有 shuffle=True。這將打亂每個時期的驗(yàn)證圖像順序。為了保持一致性,最好將其設(shè)置為 False。在 mobilenet 的代碼中,您有 include_top=True 和 pooling='avg' 當(dāng) include_top 為 True 時,池參數(shù)將被忽略。設(shè)置 include_top=True 會使模型的頂層具有 1000 個節(jié)點(diǎn)的密集層和 softmax 激活函數(shù)。我會設(shè)置 include_top=False。這樣,mobilenet 的輸出就是一個全局池化層,可以直接為您的密集分類層提供數(shù)據(jù)。在生成器中設(shè)置 class_mode='binary'。但在 model.compile 中,您將損失設(shè)置為稀疏_分類_交叉熵。這可以工作,但使用 loss=BinaryCrossentropy 進(jìn)行編譯會更好。為了保持一致性,最好每個時期只檢查一次驗(yàn)證樣本。為此,應(yīng)選擇批量大小,使驗(yàn)證樣本/batch_size 為整數(shù),并使用該整數(shù)作為驗(yàn)證步驟數(shù)。下面的代碼將為您做到這一點(diǎn)。
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)
更改驗(yàn)證批量大小可能會改變驗(yàn)證損失和準(zhǔn)確性的結(jié)果。一般來說,較大的批量大小會導(dǎo)致?lián)p失波動較小,但可能會導(dǎo)致陷入局部最小值的可能性較高。嘗試這些更改,看看結(jié)果的差異是否較小。
添加回答
舉報