首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的损失值是nan和精度:数值数据上的0.0000e+00

我的损失值是nan和精度:数值数据上的0.0000e+00
EN

Stack Overflow用户
提问于 2022-02-17 06:36:52
回答 1查看 324关注 0票数 0

我正在研究XAI模型,并根据我的数据实现一个简单的模型。在训练过程中,损失和准确性都是南和我找不到的问题。

下面是我的数据,请不要包括使用栏,因为这些是预测列。

代码语言:javascript
复制
    import xai.data
    import pandas as pd
    
    df = pd.read_csv('/content/heat_pipe.csv') 
    categorical_cols = ["Date", "Temperature(degree)", "Wind_speed(m/s)","Humidity(%)","day_of_the_week", "sarturday", "sunday", "public_holidays_(weekdays)","total_holidays"]

_ = xai.correlations(df, include_categorical=True, plot_type="matrix")
_ = xai.correlations(df, include_categorical=True)


proc_df = xai.normalize_numeric(df)
proc_df = xai.convert_categories(proc_df)

x = proc_df.drop("usage_(total)", axis=1)
y = proc_df["usage_(total)"]


x_train, y_train, x_test, y_test, train_idx, test_idx = \
    xai.balanced_train_test_split(
            x, y, "Date", "Temperature(degree)", "Wind_speed(m/s)","Humidity(%)", "day_of_the_week", "sarturday", "sunday", "public_holidays_(weekdays)","total_holidays",
            min_per_group=300,
            max_per_group=300,
            categorical_cols=categorical_cols)

x_train_display = df[train_idx]
x_train_display
x_test_display = df[test_idx]

print("Total number of examples: ", x_test.shape[0])

df_test = x_test_display.copy()
df_test["usage_(total)"] = y_test

模型代码

代码语言:javascript
复制
import sklearn
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, mean_squared_error, roc_curve, auc
from tensorflow.keras.layers import Input, Dense, Flatten,Concatenate, concatenate, Dropout, Lambda, Embedding
from tensorflow.keras.models import Model, Sequential

def build_model(X):
    input_els = []
    encoded_els = []
    dtypes = list(zip(X.dtypes.index, map(str, X.dtypes)))
    for k,dtype in dtypes:
        input_els.append(Input(shape=(1,)))
        if dtype == "int8":
            e = Flatten()(Embedding(X[k].max()+1, 1)(input_els[-1]))
        else:
            e = input_els[-1]
        encoded_els.append(e)
    encoded_els = concatenate(encoded_els)

    layer1 = Dropout(0.5)(Dense(100, activation="relu")(encoded_els))
    out = Dense(1, activation='sigmoid')(layer1)

    # train model
    model = Model(inputs=input_els, outputs=[out])
    model.compile(optimizer="adam", loss='categorical_crossentropy', metrics=['accuracy'])
    return model


def f_in(X, m=None):
    """Preprocess input so it can be provided to a function"""
    if m:
        return [X.iloc[:m,i] for i in range(X.shape[1])]
    else:
        return [X.iloc[:,i] for i in range(X.shape[1])]

def f_out(probs, threshold=0.5):
    """Convert probabilities into classes"""
    return list((probs >= threshold).astype(int).T[0])


model = build_model(x_train)
model.fit(f_in(x_train), y_train, epochs=50, batch_size=512)

误差

代码语言:javascript
复制
Epoch 1/50
1/1 [==============================] - 1s 713ms/step - loss: nan - accuracy: 0.0000e+00
Epoch 2/50
1/1 [==============================] - 0s 12ms/step - loss: nan - accuracy: 0.0000e+00
Epoch 3/50
1/1 [==============================] - 0s 15ms/step - loss: nan - accuracy: 0.0000e+00
Epoch 4/50
1/1 [==============================] - 0s 15ms/step - loss: nan - accuracy: 0.0000e+00
Epoch 5/50
1/1 [==============================] - 0s 15ms/step - loss: nan - accuracy: 0.0000e+00
Epoch 6/50
1/1 [==============================] - 0s 12ms/step - loss: nan - accuracy: 0.0000e+00
Epoch 7/50
1/1 [==============================] - 0s 15ms/step - loss: nan - accuracy: 0.0000e+00
Epoch 8/50
1/1 [==============================] - 0s 12ms/step - loss: nan - accuracy: 0.0000e+00
Epoch 9/50
1/1 [==============================] - 0s 13ms/step - loss: nan - accuracy: 0.0000e+00
Epoch 10/50
1/1 [==============================] - 0s 15ms/step - loss: nan - accuracy: 0.0000e+00
Epoch 11/50
1/1 [==============================] - 0s 13ms/step - loss: nan - accuracy: 0.0000e+00
EN

回答 1

Stack Overflow用户

发布于 2022-02-17 18:22:17

对我来说,这看起来像是你的损失函数的问题。Categorical_crossentropy规范在多类预测中的应用。所以在我看来,这看起来不是一个分类问题,而是一个回归问题。这就是为什么您应该使用损失作为回归,如mean_squared_error

代码语言:javascript
复制
model.compile(optimizer="adam", loss='mean_squared_error', metrics=['accuracy'])

另一件事可能是你的激活功能。大多数情况下,如果您试图预测数值,则使用线性激活函数。选择正确的激活函数的一个有用的读取可能是。这意味着您必须将输出层的激活函数更改为linear

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71153483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档