我已經建立了一個包含4個類的小型自定義圖像分類訓練/ val數據集。 訓練數據集有〜110.000個圖像。 驗證數據集具有〜6.000圖像。圖像分類。 (v1)
我遇到的問題是,在訓練中,無論是訓練精度(如在最後的訓練樣本的平均測量精度)和培訓損耗而提高,同時驗證準確性和損失保持不變。
這隻有當我使用以來和RESNET模式,如果我用同樣的訓練和驗證數據的alexnet模型,驗證損失和準確性提高
在我的實驗,我通過導入使用幾種卷積架構發生他們tensorflow.contrib.slim.nets
代碼的組織結構如下:
...
images, labels = preprocessing(..., train=True)
val_images, val_labels = preprocessing(..., train=False)
...
# AlexNet model
with slim.arg_scope(alexnet.alexnet_v2_arg_scope()):
logits, _ = alexnet.alexnet_v2(images, ..., is_training=True)
tf.get_variable_scope().reuse_variables()
val_logits, _ = alexnet.alexnet_v2(val_images, ..., is_training=False)
# Inception v1 model
with slim.arg_scope(inception_v1_arg_scope()):
logits, _ = inception_v1(images, ..., is_training=True)
val_logits, _ = inception_v1(val_images, ..., is_training=False, reuse=True)
loss = my_stuff.loss(logits, labels)
val_loss = my_stuff.loss(val_logits, val_labels)
training_accuracy_op = tf.nn.in_top_k(logits, labels, 1)
top_1_op = tf.nn.in_top_k(val_logits, val_labels, 1)
train_op = ...
...
而不是使用一個單獨的eval腳本,我跑在每個時期和ALS結束的驗證步驟o,爲了調試目的,我正在運行一個早期的val步驟(在訓練之前),並且通過對最後x個步驟的訓練預測進行平均來檢查訓練的準確性。
當我使用盜V1模型(註釋出alexnet一個)記錄器的輸出是後1個劃時代如下:
early Validation Step
precision @ 1 = 0.2440 val loss = 1.39
Starting epoch 0
step 50, loss = 1.38, training_acc = 0.3250
...
step 1000, loss = 0.58, training_acc = 0.6725
...
step 3550, loss = 0.45, training_acc = 0.8063
Validation Step
precision @ 1 = 0.2473 val loss = 1.39
如圖所示,訓練精度和損失提高很多一個曆元之後,但驗證損失完全沒有改變。這已經過至少10次測試,結果總是相同的。如果驗證損失由於過度配合而變差,我會理解,但在這種情況下,它根本沒有改變。
爲了排除與驗證數據的任何問題,我也呈現結果,而使用超薄的AlexNet實施培訓。與alexnet模型訓練產生以下輸出:
early Validation Step
precision @ 1 = 0.2448 val loss = 1.39
Starting epoch 0
step 50, loss = 1.39, training_acc = 0.2587
...
step 350, loss = 1.38, training_acc = 0.2919
...
step 850, loss = 1.28, training_acc = 0.3898
Validation Step
precision @ 1 = 0.4069 val loss = 1.25
準確性和有效性的損失,無論是在訓練和測試數據,使用alexnet模型時正確地改進,他們保持在隨後的時期提高。
我不明白是什麼可能是問題的原因,以及爲什麼它使用開始/ RESNET模型時,但alexnet訓練的時候不提出了自己。
有沒有人有想法?
使用tf.nn.sparse_softmax_cross_entropy_with_logits計算損失,該值使用未縮放的logits並在內部執行softmax。 – user3897060