Python Keras LSTM收敛于数据集#x27;s均值
数据片段: [1,0.52916667 0.55,0.5375 0.55714286 0.54285714 0.09395973] [0,0.59285714 0.55,0.5,0.53076923 0.5,0.09395973] [0,0.53076923 0.5375 0,0.5375 0.5,0.08277405] [0,0.55625 0.55833333 1,0.538889 0.52777778 0.08137584] [1,0.5222222 0.52857143 0.54,0.55,0.55,0.10834132] [1,0.6875 0.6125 0.575 0.53,0.52,0.09395973] [0,0.55666667 0.55,0.55833333 0.52647059 0.52058824 0.08137584] [0,0.53529412 0.5,0.5,0.5,0.5,0.025177] [0,0.5208333 1,1,0.54,0.58,0.34563758] [0,0.55,0.6,0.5,0.58,0.5,0.09395973] [0,0.67,0.5,0,0.5,0.5,0.07957814] [0,0.51764706 1,1,0.54166667 0.55,0.16107383] 此timeseries数据帧中的每一行包含7个特性,我试图预测下一时间步的第一个特性是1还是0 为了实现这一点,我将所有内容向前移动了一步来创建标签,如下所示:Python Keras LSTM收敛于数据集#x27;s均值,python,tensorflow,keras,lstm,Python,Tensorflow,Keras,Lstm,数据片段: [1,0.52916667 0.55,0.5375 0.55714286 0.54285714 0.09395973] [0,0.59285714 0.55,0.5,0.53076923 0.5,0.09395973] [0,0.53076923 0.5375 0,0.5375 0.5,0.08277405] [0,0.55625 0.55833333 1,0.538889 0.52777778 0.08137584] [1,0.5222222 0.52857143 0.54,0.5
def windows(data):
x_window_size = 100
y_window_size = 1
dataX, dataY = [], []
for i in range(len(data)-x_window_size-y_window_size):
x_window_data = data[i:(i+x_window_size)]
y_window_data = [data[(i + x_window_size + y_window_size)]]
dataX.append(x_window_data)
y = [x[0] for x in y_window_data]
dataY.append(y)
return np.array(dataX), np.array(dataY)
模型:
inputs = Input(shape=(100, 7))
x = CuDNNLSTM(128, return_sequences=True)(inputs)
x = Dropout(0.2)(x)
x = CuDNNLSTM(128, return_sequences=True)(x)
x = Dropout(0.2)(x)
x = CuDNNLSTM(128)(x)
x = Dropout(0.2)(x)
predictions = Dense(1, activation='linear')(x)
model = Model(inputs=inputs, outputs=predictions)
optimiser = keras.optimizers.Nadam(lr=0.01)
model.compile(
loss="mse",
optimizer=optimiser
)
如果我在模型中运行10000行数据,在10个纪元之后,我会得到以下结果:
看起来不错。。。但我的数据集实际上是400万行。当我通过训练运行400万行时,它只预测Y值的平均值(0.5):
经过1或10个时代后,结果是相同的。我不知道这里发生了什么。有什么想法吗?首先,有很多不同的方法,为什么会这样
x = CuDNNLSTM(128)(inputs)
x = Dropout(0.5)(x)
predictions = Dense(1, kernel_initializer='normal', activation='sigmoid')(x)
model.compile(loss='binary_crossentropy', optimizer='adam')
另外,您的模型可能仍然有太多的噪音。您可以尝试图层为64-64-1的模型,而不是128-128-128的模型,甚至可以尝试图层为32-1的模型。您还可以调整掉图层,使其类似于0.3、0.4、0.5甚至更多。如果你的模型有太多的噪音,那么它只是尝试和错误,试图把噪音出来
资源:
你期望结果是什么?我试图预测下一个时间步为1或0的概率,因此我期望预测值在1和0之间,变化很大。因此,0.4、0.2、0.7等预测是可以预期的。