簡體   English   中英

我的神經網絡正在執行回歸而不是分類

[英]My Neural network is perfroming regression instead of classification

我正在從事一個需要實施神經網絡的數據科學項目。 我為訓練提供的數據集不是連續的,並且具有 class 標簽。 但我不知道為什么將其視為事件序列。

我對 model 使用以下代碼:

model = keras.Sequential([
    layers.Dense(100, activation='relu'),
    layers.Dropout(0.4),
    layers.Dense(100, activation='relu'),
    layers.Dropout(0.4),
    layers.Dense(100, activation='relu'),
    layers.Dropout(0.4),
    layers.Dense(100, activation='relu'),
    layers.Dense(6, activation='softmax')
])
model.compile(
    optimizer="adam",
    loss="sparse_categorical_crossentropy",
    metrics=['accuracy']
)
model.fit(X_train, y_train,epochs=100,batch_size=2100)
y_pred=model.predict(X_test)
print(accuracy_score(y_test,y_pred))

accuracy_score function 給出了這個錯誤

Classification metrics can't handle a mix of multiclass and continuous-multioutput targets

此錯誤消息顯示算法何時執行回歸。 我該如何解決這個問題?

您的y_pred是浮點數,但accuracy_score需要整數。 我建議您對標簽進行一次性編碼並使用categorical_crossentropy損失 function。 然后y_pred表示 class 概率,可以通過y_pred.argmax(axis=1)簡單地轉換為預測。 模擬數據示例:

from sklearn.metrics import accuracy_score
import tensorflow.keras as keras
import tensorflow.keras.layers as layers
import numpy as np

n_classes = 6
n_variables = 100
n_examples = 1000
X = np.random.normal(0, 1, (n_examples, n_variables))
y_ = np.random.choice(n_classes, size=n_examples)
y = np.eye(n_classes)[y_]

idx = int(n_examples * 0.8)
X_train, y_train = X[:idx], y[:idx]
X_test, y_test = X[idx:], y[idx:]

model = keras.Sequential([
    layers.Dense(100, activation='relu'),
    layers.Dropout(0.4),
    layers.Dense(100, activation='relu'),
    layers.Dropout(0.4),
    layers.Dense(100, activation='relu'),
    layers.Dropout(0.4),
    layers.Dense(100, activation='relu'),
    layers.Dense(6, activation='softmax')
])
model.compile(
    optimizer="adam",
    loss="categorical_crossentropy",
    metrics=['accuracy']
)
model.fit(X_train, y_train,epochs=10,batch_size=100)
y_pred=model.predict(X_test)
print(accuracy_score(y_test.argmax(axis=1), y_pred.argmax(axis=1)))

這里y_是形狀(n_examples,)的類別, y是形狀(n_examples, n_classes)的單熱編碼類別, model.predict(X_test)給出了形狀(n_examples, n_classes)model.predict(X_test).argmax(axis=1)的預測概率。 model.predict(X_test).argmax(axis=1)給出形狀的預測類(n_examples,)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM