我正在 Colab 上為我的光通信專案訓練模型,結果發生了一件奇怪的事情。我首先訓練的模型顯示接近 99% 的訓練和 97% 的驗證準確度,但運行時間在晚上的某個時候到期。現在,對于同一個模型,我在重新連接到運行時后嘗試重新訓練。但是現在,準確率從第一個 epoch 開始保持不變,為 25%。令人驚訝的是,有 4 個類別,我的模型用 0.25 對它們進行分類。我不確定是什么導致了這個錯誤,因為經過幾次重新啟動后,模型顯示出與原始性能相似的性能,但現在又回到了 25% 的準確度。請參考圖片和下面的型號規格。
型號概要
model_fm = tf.keras.Sequential([
tf.keras.layers.Conv1D(256,kernel_size = 3, activation = 'relu', input_shape = x_train.shape[1:]),
tf.keras.layers.Dropout(0.3),
tf.keras.layers.Conv1D(128,kernel_size = 3, activation = 'relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Conv1D(64,kernel_size = 3, activation = 'relu'),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(256, activation = 'relu'),
tf.keras.layers.Dense(128, activation = 'relu'),
tf.keras.layers.Dense(128, activation = 'relu'),
tf.keras.layers.Dense(64, activation = 'relu'),
tf.keras.layers.Dense(4, activation = 'softmax')
])
model_fm.compile(loss='categorical_crossentropy', optimizer='Adam', metrics=['accuracy'])
model_fm.fit(x_train, y_train, batch_size=256, verbose=1, epochs=60,validation_data=(x_val, y_val), callbacks = [earlystopping, reduce_lr])
前期進展
Epoch 1/60 612/612 [==============================] - 170s 275ms/step - 損失:0.9359 - 準確度:0.5621 - val_loss:0.7793 - val_accuracy:0.6299
紀元 2/60 612/612 [==============================] - 168s 274ms/step - 損失:0.5998 - 準確度:0.7369 - val_loss:0.4597 - val_accuracy:0.8002
Epoch 3/60 612/612 [==============================] - 173s 284ms/step - 損失:0.4464 - 準確度:0.8078 - val_loss:0.3138 - val_accuracy:0.8693
Epoch 4/60 612/612 [==============================] - 174s 284ms/step - 損失:0.3427 - 準確度:0.8578 - val_loss:0.2393 - val_accuracy:0.9037
重新啟動運行時后:
Epoch 1/60 409/409 [==============================] - 112s 273ms/step - 損失:1.3865 - 準確度:0.2493 - val_loss:1.3862 - val_accuracy:0.2594
紀元 2/60 409/409 [==============================] - 111s 271ms/step - 損失:1.3863 - 準確度: 0.2501 - val_loss: 1.3864 - val_accuracy: 0.2435
PS忽略后一種情況下用于訓練的樣本數量的變化。該模型在整個資料集上顯示了類似的結果(準確度為 25%)。我認為使用較少數量的樣本可能會緩解這種情況,但事實并非如此。非常感激你的幫助。
uj5u.com熱心網友回復:
我認為這是因為第一個密集層非常大(16M 引數,代表引數總數的 99%),因此您的模型對初始化非常敏感,有時很難訓練。
uj5u.com熱心網友回復:
您在架構中使用多個密集層,當您展平最后一層時,會創建一個包含 68k 個值的陣列,然后每個值作為輸入傳遞給密集層中的 256 個神經元。你可以做的是在中間使用 GAP 層,然后展平,然后使用一個密集層(4 個神經元)或 2 個密集層(第一個密集層有 8 個神經元,第二個有 4 個神經元)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/346292.html
下一篇:在tensorflow.python.data.ops.dataset_ops.BatchDataset中找到最大值
