tensorflow - 为什么在训练模型时我的 Keras 损失没有变化?

标签 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

数据肯定有一个轻微/不错的模式,模型应该能够捕捉到。

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

谢谢!

最佳答案

单个类的分类器

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

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

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

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

也许您需要 sigmoid 或 relu 甚至线性激活,具体取决于 Y 值的数值分布。

关于tensorflow - 为什么在训练模型时我的 Keras 损失没有变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54738769/

相关文章:

machine-learning - 机器学习中维度、属性和特征的区别

machine-learning - 在哪里可以找到一组带有真实标签的良好基准聚类数据集?

c++ - 从 keras 保存 .pb 和 .pbtxt 文件

python - BasicRNNCell 中的内部变量

python - Tensorflow仅初始化特定范围

machine-learning - 神经网络中的批量归一化

python - 双向 LSTM 合并模式说明

python - Keras CosineSimilarity - 正或负

docker - Windows中拒绝docker权限

python - 错误 : OpenCV(4. 1.0) 错误 : (-215:Assertion failed) ! ssize.empty() 函数 'cv::resize'