我正在嘗試使用 Iris 資料集計算交叉熵損失,但是當我運行我的模型并啟動我的繪圖時,我的損失和驗證損失都保持為零的直線。我不知道我做錯了什么。這是我的代碼:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from tensorflow import keras
from keras import Sequential
from keras.layers import BatchNormalization, Dense, Dropout
from keras.callbacks import EarlyStopping
iris = sns.load_dataset('iris')
X = iris.iloc[:,:4]
y = iris.species.replace({'setosa': 0, 'versicolor': 1, 'virginica': 2})
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.3, random_state=69)
sc = StandardScaler()
sc.fit_transform(X_train)
sc.fit_transform(X_test)
nn_model = Sequential([Dense(4, activation='relu', input_shape=[X.shape[1]]),
BatchNormalization(),
Dropout(.3),
Dense(4, activation='relu'),
BatchNormalization(),
Dropout(.3),
Dense(1, activation='sigmoid')])
nn_model.compile(optimizer='sgd', loss='categorical_crossentropy', metrics=['categorical_accuracy'])
early_stopping = EarlyStopping(min_delta=1e-3, patience=10, restore_best_weights=True)
fit = nn_model.fit(X_train, y_train, validation_data=(X_test,y_test),
batch_size=16, epochs=200, callbacks=[early_stopping], verbose=1)
losses = pd.DataFrame(fit.history)
這就是情節的樣子:


有什么理由這樣做嗎?
uj5u.com熱心網友回復:
的擬合變換StandardScaler()不是就地操作。您必須執行以下操作
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
此外,您有 3 個輸出(檢查:)y_train.value_counts(),因此輸出層應該是:
nn_model = Sequential([ ...,
Dropout(.3),
Dense(3, activation='softmax')])
最后,丟失的函式應該是sparse_categorical_crossentropy你的整數目標。
nn_model.compile(optimizer='sgd',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/408858.html
標籤:
