为什么我在训练Keras模型时损失函数没有变化?

我一直在尝试创建一个Keras模型来寻找我的数值数据集中的模式。我多次更改了损失函数和优化器,但损失没有变化。我还移除和添加了层,并更改了层中的神经元数量,但损失依然没有变化。

模型是这样的:

from keras.models import Sequentialfrom keras.layers import Denseimport numpynumpy.random.seed(7)dataset = numpy.loadtxt("data.csv", delimiter=",")X = dataset[:, :-1]Y = dataset[:, -1]print(X)# create modelmodel = Sequential()model.add(Dense(18, input_dim=18, activation='tanh'))model.add(Dense(36, activation='relu'))model.add(Dense(72, activation='relu'))model.add(Dense(72, activation='relu'))model.add(Dense(32, activation='relu'))model.add(Dense(16, activation='relu'))model.add(Dense(1, activation='softmax'))# Compile modelmodel.compile(loss='mean_squared_error', optimizer='adam')# Fit the modelmodel.fit(X, Y, epochs=100, batch_size=35)# save modelmodel.save('tried.h5')

我还更改了epochs和batch size,但对损失没有影响。

以下是日志:

Using TensorFlow backend.Printing X Data [[1.19539070e+01 1.72686310e+01 2.24426384e+01 ... 1.73570000e-04  4.35710000e-04 9.55710000e-04] [1.20239086e+01 1.45762539e+01 2.13278122e+01 ... 1.78570000e-04  4.06430000e-04 9.17860000e-04] [2.30696812e+01 1.82697601e+01 2.13278122e+01 ... 1.15000000e-04  3.75710000e-04 9.17860000e-04] ... [2.83583431e+01 2.38079319e+01 2.81154442e+01 ... 1.13570000e-04  3.20710000e-04 6.65000000e-04] [4.34185066e+01 2.17990398e+01 2.81154442e+01 ... 1.12860000e-04  3.37140000e-04 6.65000000e-04] [5.71823807e+01 2.19225960e+01 3.02071724e+01 ... 6.42900000e-05  3.56430000e-04 6.45000000e-04]]Epoch 1/100342420/342420 [==============================] - 15s 45us/step - loss: 0.4945Epoch 2/100342420/342420 [==============================] - 15s 44us/step - loss: 0.4945Epoch 3/100342420/342420 [==============================] - 15s 43us/step - loss: 0.4945Epoch 4/100342420/342420 [==============================] - 15s 44us/step - loss: 0.4945Epoch 5/100342420/342420 [==============================] - 15s 44us/step - loss: 0.4945Epoch 6/100342420/342420 [==============================] - 15s 44us/step - loss: 0.4945Epoch 7/100342420/342420 [==============================] - 14s 42us/step - loss: 0.4945Epoch 8/100234500/342420 [===================>..........] - ETA: 4s - loss: 0.4946

数据确实存在一定的模式,模型应该能够捕捉到这些模式。

谁能推荐一些更改,以便模型能够真正适应数据,或者指出任何错误?

谢谢!


回答:

单类分类器

你编写的代码最后是一个仅针对单类的分类器,即模型的最后一层

model.add(Dense(1, activation='softmax'))

只有一个神经元,并且使用了softmax函数,这将确保该层所有神经元的总和等于1;通常用于分类器,以便将输出解释为各类的概率。

因此,无论权重如何,这个网络对所有输入的输出始终为1.0。

也许你应该考虑使用sigmoid、relu甚至是线性激活函数,这取决于你的Y值的数值分布。

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注