为什么训练模型时我在Keras中的损失没有改变?

时间:2019-02-17 23:42:39

标签: tensorflow machine-learning keras deep-learning

我一直在尝试创建Keras模型以在我的数字数据集中找到模式。我已经多次更改了损失和优化程序,而损失没有任何变化。我还删除/添加了图层,并更改了图层中神经元的数量,但损失仍然没有变化。

模型是:

from keras.models import Sequential
from keras.layers import Dense

import numpy

numpy.random.seed(7)

dataset = numpy.loadtxt("data.csv", delimiter=",")

X = dataset[:, :-1]
Y = dataset[:, -1]

print(X)

# create model
model = 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 model
model.compile(loss='mean_squared_error', optimizer='adam')

# Fit the model
model.fit(X, Y, epochs=100, batch_size=35)


# save model
model.save('tried.h5')

我也更改了时间和批次大小,对损失没有影响。

以下是日志:

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/100
342420/342420 [==============================] - 15s 45us/step - loss: 0.4945
Epoch 2/100
342420/342420 [==============================] - 15s 44us/step - loss: 0.4945
Epoch 3/100
342420/342420 [==============================] - 15s 43us/step - loss: 0.4945
Epoch 4/100
342420/342420 [==============================] - 15s 44us/step - loss: 0.4945
Epoch 5/100
342420/342420 [==============================] - 15s 44us/step - loss: 0.4945
Epoch 6/100
342420/342420 [==============================] - 15s 44us/step - loss: 0.4945
Epoch 7/100
342420/342420 [==============================] - 14s 42us/step - loss: 0.4945
Epoch 8/100
234500/342420 [===================>..........] - ETA: 4s - loss: 0.4946

最肯定的是,数据确实具有轻微/适当的模式,模型应该可以使用该模式。

任何人都可以建议任何更改以使模型真正适合数据或发现任何错误吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

单个类别的分类器

您编写的代码仅以单个类的分类器结尾,即模型的最后一层

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

具有单个神经元,并且softmax函数将确保该层中所有神经元的总数等于1;通常用于分类器,以将输出解释为类的概率。

因此,无论权重是多少,该网络将始终为所有输入输出1.0。

根据Y值的数字分布,也许您想要S型或Relu甚至线性激活。