首页 > 解决方案 > 为什么我会得到持续的损失和准确性?

问题描述

这是我的代码:-

# Importing the essential libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# Getting the dataset
data = pd.read_csv("sales_train.csv")
X = data.iloc[:, 1:-1].values 
y = data.iloc[:, -1].values
# y = np.array(y).reshape(-1, 1)

# Getting the values for november 2013 and 2014 to predict 2015
list_of_november_values = []
list_of_november_values_y = []
for i in range(0, len(y)):
    if X[i, 0] == 10 or X[i, 0] == 22:
        list_of_november_values.append(X[i, 1:])
        list_of_november_values_y.append(y[i])

# Converting list to array
arr_of_november_values = np.array(list_of_november_values)
y_train = np.array(list_of_november_values_y).reshape(-1, 1)

# Scaling the independent values 
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(arr_of_november_values)

# Creating the neural network
from keras.models import Sequential
from keras.layers import Dense

nn = Sequential()
nn.add(Dense(units=120, activation='relu'))
nn.add(Dense(units=60, activation='relu'))
nn.add(Dense(units=30, activation='relu'))
nn.add(Dense(units=15, activation='relu'))
nn.add(Dense(units=1, activation='softmax'))
nn.compile(optimizer='adam', loss='mse')
nn.fit(X_train, y_train, batch_size=100, epochs=25)

# Saving the weights
nn.save_weights('weights.h5')
print("Weights Saved")

对于我的损失,我在每个时代都得到了相同的价值。如果我缺少一个导致我的损失持续存在的概念,是否有可能?

这是代码的数据集

标签: pythonkeras

解决方案


主要原因是您对最终层激活的奇怪选择,以及使用的损失函数。重新考虑这一点:您在单单元全连接层上使用 softmax 激活。Softmax 激活采用一个向量并对其进行缩放,以使值的总和等于 1,并根据以下函数保持比例:

软最大

这个想法是你的网络只会输出 1,因此没有梯度,也没有学习。

要解决这个问题,首先根据数据集的结构将最终层激活更改为 ReLU 或线性(我自己不愿意使用提供的数据,但我相信您了解数据集的结构)。

我预计您的网络结构可能会出现更多问题,但我将由您决定。目前,最大的问题是你的最后一层激活。


推荐阅读