Python 为什么我会得到一个不断的损失和准确性?
这是我的代码:-Python 为什么我会得到一个不断的损失和准确性?,python,keras,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
# 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")
对于我的损失,我在每个时代都得到了相同的价值。如果有一个我丢失的概念导致我的损失是恒定的,这有可能吗
这是代码的主要原因。主要原因是您对最终层激活的奇怪选择,以及使用的损失函数。重新考虑这一点:您正在一个完全连接的层上使用softmax激活。Softmax激活采用矢量并对其进行缩放,使值之和等于1,并根据以下函数保持比例: 这个想法是,你的人际网络将只输出1,因此没有梯度,也没有学习 要解决这个问题,首先根据数据集的结构将最终层激活更改为ReLU或Linear(我自己不愿意使用提供的数据,但我相信您了解数据集的结构) 我预计在你的网络结构方面可能会有更多的问题,但我会让你自己决定。现在,最大的问题是最后一层的激活。更改这一行:
nn.add(Dense(units=1, activation='softmax'))
nn.add(Dense(units=1))
关于这一行:
nn.add(Dense(units=1, activation='softmax'))
nn.add(Dense(units=1))
对于回归问题,不需要激活函数