【发布时间】:2021-09-02 21:30:39
【问题描述】:
我正在尝试使用 keras 密集神经网络来预测一些时间序列。 当在复杂的真实数据集上拟合我的模型时,我的模型会收敛到一个恒定的输出,即无论输入是什么,模型都会给出相同的输出(这似乎是对我的数据集平均值的合理估计)。
我将问题简化为非常简单的模拟数据集,但仍然存在同样的问题。这是一个最小的工作示例:
import numpy as np
import tensorflow as tf
from tensorflow.keras import layers, models
import matplotlib.pyplot as plt
X = []
Y = []
for jh in range(10000):
x = np.arange(-1, 1, 0.01)
y = 1+x*((np.random.random()-0.5))
y += np.random.randn(len(x))/(100)
X.append(y[:100])
Y.append(y[100:])
X = np.array(X)[:,:,None]
Y = np.array(Y)[:,:,None]
model = models.Sequential()
model.add(layers.Input((100,1,)))
model.add(layers.Flatten())
model.add(layers.Dense(100, activation='sigmoid'))
model.add(layers.Dense(100, activation='sigmoid'))
model.add(layers.Dense(100, activation='sigmoid'))
model.add(tf.keras.layers.Reshape((100,1)))
model.compile(loss = tf.keras.losses.MeanSquaredError(),optimizer="adam")
# model.summary()
print("Fit model on training data")
print("Fit model on training data")
history = model.fit(x=X, y=Y, batch_size=10000, epochs=200)
for k in np.arange(0,10000,1000):
plt.plot(np.arange(len(X[k])), X[k])
plt.plot(np.arange(len(X[k]), len(X[k])+len(Y[k])), model(X)[k])
plt.plot(np.arange(len(X[k]), len(X[k])+len(Y[k])), Y[k])
在此示例中,无论输入如何,模型都会返回完全相同的输出。
我尝试更改层数、损失函数、学习率、批量大小和 epoch 数,但没有任何明显改善。
您对这个问题有什么建议吗?
【问题讨论】:
标签: python tensorflow machine-learning keras