为什么我会不断得到损失和准确性?

时间:2020-08-22 05:22:46

标签: python keras

这是我的代码:-

# 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")

对于我的损失,每个时期我都得到相同的价值。我是否可能缺少一个导致我的损失保持不变的概念?

这里是代码的dataset

2 个答案:

答案 0 :(得分:1)

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

softmax

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

要解决此问题,请先根据数据集的结构将最终层激活更改为ReLU或Linear(我不愿意自己使用提供的数据,但是我确定您了解自己的结构数据集)。

我希望您的网络结构可能还会有其他问题,但是我会留给您。目前,最大的问题是您的最终层激活。

答案 1 :(得分:0)

更改此行:

nn.add(Dense(units=1, activation='softmax'))

此行:

nn.add(Dense(units=1))

对于回归问题,您不需要激活函数。