【问题标题】:Keras network returns same output regardless of the input无论输入如何,Keras 网络都会返回相同的输出
【发布时间】: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


    【解决方案1】:

    如果你重新排列你的随机输入就像

    y = np.array(1. + x)
    y += 1. / 100.
    

    还有

    J, K = [] , []
    
    for jh in range(10000):
        j = np.arange(-1, 1, 0.01)
        k = -np.array(1. - j)
        k += 1. / 100
        J.append(k[:100])
        K.append(k[100:])
    J = np.array(J)[:, :, None]
    K = np.array(K)[:, :, None]
    

    最后添加

    plt.plot(np.arange(len(X[k]), len(X[k]) + len(Y[k])), model(J)[k])
    

    在绘图循环中,您将看到两个不同的结果。也许你应该检查你的数据集多样性。

    【讨论】:

      猜你喜欢
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-13
      • 1970-01-01
      • 2017-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多