[英]Why Inception V3 retrained using tensorflow and keras on same dataset shows different accuracy?
我正在嘗試重新訓練在ImageNet數據集上預訓練的Inception V3。
******* Keras(使用Tensorflow后端)************
我使用 Keras(tensorflow后端)重新訓練了Inception V3 ,其代碼如下:
# SETUP MODEL
CLASSES = 3
base_model = InceptionV3(weights='imagenet', include_top=False)
x=base_model.output
x=GlobalAveragePooling2D()(x)
preds=Dense(CLASSES,activation='softmax')(x) #final layer with softmax activation
model=Model(inputs=base_model.input,outputs=preds)
# transfer learning
for layer in base_model.layers:
layer.trainable = False
model.compile(loss="categorical_crossentropy", optimizer='adam',metrics=["accuracy"])
# train the network
print("[INFO] training network...")
H = model.fit_generator(
aug.flow(trainX, trainY, batch_size=BS),
validation_data=(testX, testY),
steps_per_epoch=len(trainX) // BS,
epochs=EPOCHS, verbose=1, callbacks=[csv_logger])
經過100個時期的訓練后,我獲得了85%到90%的准確度,如圖所示: 使用Keras plor的訓練結果
******** Tensorflow **********
我還使用Tensorflow在ImageNet上訓練過預訓練的Inception V3,鏈接如下: 如何為新類別重新訓練圖像分類器 。 經過4000次迭代后,我的准確度在93%到96%之間 ,如下圖所示: 使用Tensorflow的訓練結果
任何人都可以幫我找到這個原因的解釋,或者請指出錯誤(如果有的話),我的解釋。
實際上在Keras我正在使用:
較低的學習率= 0.001 epochs = 100和批量大小= 32數據增強
aug = ImageDataGenerator(rotation_range=25, width_shift_range=0.1,
height_shift_range=0.1, shear_range=0.2, zoom_range=0.2,
horizontal_flip=True, fill_mode="nearest")
另一方面 :
在tensorflow中,我正在使用
高學習率= 0.01
沒有增強技術。
但似乎,張量流模型實現了更高的准確性。 如果有人知道任何技巧tensorflow 如何為新類別使用或任何可能的邏輯原因重新訓練這個差異的圖像分類器 ,請幫助我理解。
你可能會發現很多不同的原因。 我認為更重要的部分是研究你在旅途中可能想要學習的一些事情。
首先,你應該檢查每x個時期的准確性。 如果在3個時代之后准確性沒有提高,則需要結束訓練。
您需要在每個類中有一些偶數個圖像,否則一個類將在您的批處理中過多表示。
您可能希望在管道中包含一些增強技術,以防止過度擬合。 這包括在圖像輸入批次時對圖像的百分比進行旋轉,裁剪,模糊,噪聲等。 這也可以幫助解決每個類沒有足夠圖像的問題。
您可能也沒有選擇最佳學習率,這很重要。
我建議看一下圖像分類的fast.ai部分,並通過張量流切換到fastai庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.