我正在嘗試使用 keras 從資料集中預測價格值。我正在關注本教程:https ://keras.io/examples/structured_data/structured_data_classification_from_scratch/ ,但是當我進入擬合模型的部分時,我得到了巨大的負損失和非常小的準確性
Epoch 1/50
1607/1607 [==============================] - ETA: 0s - loss: -117944.7500 - accuracy: 3.8897e-05
2022-05-22 11:14:28.922065: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:113] Plugin optimizer for device_type GPU is enabled.
1607/1607 [==============================] - 15s 10ms/step - loss: -117944.7500 - accuracy: 3.8897e-05 - val_loss: -123246.0547 - val_accuracy: 7.7791e-05
Epoch 2/50
1607/1607 [==============================] - 15s 9ms/step - loss: -117944.7734 - accuracy: 3.8897e-05 - val_loss: -123246.0547 - val_accuracy: 7.7791e-05
Epoch 3/50
1607/1607 [==============================] - 15s 10ms/step - loss: -117939.4844 - accuracy: 3.8897e-05 - val_loss: -123245.9922 - val_accuracy: 7.7791e-05
Epoch 4/50
1607/1607 [==============================] - 16s 10ms/step - loss: -117944.0859 - accuracy: 3.8897e-05 - val_loss: -123245.9844 - val_accuracy: 7.7791e-05
Epoch 5/50
1607/1607 [==============================] - 15s 10ms/step - loss: -117944.7422 - accuracy: 3.8897e-05 - val_loss: -123246.0547 - val_accuracy: 7.7791e-05
Epoch 6/50
1607/1607 [==============================] - 15s 10ms/step - loss: -117944.8203 - accuracy: 3.8897e-05 - val_loss: -123245.9766 - val_accuracy: 7.7791e-05
Epoch 7/50
1607/1607 [==============================] - 15s 10ms/step - loss: -117944.8047 - accuracy: 3.8897e-05 - val_loss: -123246.0234 - val_accuracy: 7.7791e-05
Epoch 8/50
1607/1607 [==============================] - 15s 10ms/step - loss: -117944.7578 - accuracy: 3.8897e-05 - val_loss: -123245.9766 - val_accuracy: 7.7791e-05
Epoch 9/50
這是我的圖表,就代碼而言,它看起來像示例中的那個,但經過了調整:
# Categorical feature encoded as string
desc = keras.Input(shape=(1,), name="desc", dtype="string")
# Numerical features
date = keras.Input(shape=(1,), name="date")
quant = keras.Input(shape=(1,), name="quant")
all_inputs = [
desc,
quant,
date,
]
# String categorical features
desc_encoded = encode_categorical_feature(desc, "desc", train_ds)
# Numerical features
quant_encoded = encode_numerical_feature(quant, "quant", train_ds)
date_encoded = encode_numerical_feature(date, "date", train_ds)
all_features = layers.concatenate(
[
desc_encoded,
quant_encoded,
date_encoded,
]
)
x = layers.Dense(32, activation="sigmoid")(all_features)
x = layers.Dropout(0.5)(x)
output = layers.Dense(1, activation="relu")(x)
model = keras.Model(all_inputs, output)
model.compile("adam", "binary_crossentropy", metrics=["accuracy"])
資料集如下所示:
date desc quant price
0 20140101.0 CARBONATO DE DIMETILO 999.00 1428.57
1 20140101.0 HIDROQUINONA 137.00 1314.82
2 20140101.0 1,5 PENTANODIOL TECN. 495.00 2811.60
3 20140101.0 SOSA CAUSTICA LIQUIDA 50% 567160.61 113109.14
4 20140101.0 BOROHIDRURO SODICO 6.24 299.27
此外,我正在使用以下方法將日期從 YYYY-MM-DD 轉換為數字:
dataset['date'] = pd.to_datetime(dataset["date"]).dt.strftime("%Y%m%d").astype('float64')
我究竟做錯了什么?:(
編輯:我雖然教程中的編碼器功能正在規范化資料,但事實并非如此。有沒有其他你知道的教程可以更好地指導我?丟失問題已修復!(由于歸一化)
uj5u.com熱心網友回復:
您似乎對模型的組件感到非常困惑。
- 二元交叉熵是一種分類損失,你的問題是回歸->使用 MSE。同樣“準確性”對回歸沒有意義,也將其更改為 MSE。
- 你的資料是巨大的,因此你的損失是巨大的。你在資料中有一個價格
113109.14,如果你的模型最初是壞的并且說 0 怎么辦?你損失了 ~100,000^2 = 10,000,000,000。標準化您的資料,在您的情況下 - 輸出變數(目標,價格)在 -1 和 1 之間 - 在某些用例中,輸出神經元應該具有激活函式,但除非您知道為什么要這樣做,否則將其保留為線性是更安全的選擇。
- Dropout 是一種規范模型的方法,不要從擁有它開始,始終從最簡單的模型開始,并確保在嘗試最大化測驗分數之前可以學習。
- 神經網路不會外推,以原始格式輸入不斷增長的信號(日期)幾乎肯定會導致問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/479249.html
下一篇:ValueError:圖層“sequential_13”的輸入0與圖層不兼容:預期形狀=(無,21367,9000),找到形狀=(無,9000)
