我正在尝试训练一个简单的 RNN:
import tensorflow as tf
from tensorflow import keras as k
import matplotlib.pyplot as plt
import tensorflow.python.keras.backend as K
#MODEL
model = k.Sequential([
k.layers.Input(batch_input_shape=[30, 1, 1]),
k.layers.LSTM(16),
k.layers.Dense(1, activation = k.activations.relu),
])
model.compile(optimizer = 'Adam', loss='mse')
history = model.fit(x = X_train, y = y_train, epochs=20, validation_data = (X_val, y_val), batch_size = 30, shuffle = False)
X_train 是一个 1D numpy.ndarray,包含由 H0 或 H1 类型的观测值构成的序列(H0 是均值 = 0 且标准差 = 1 的高斯分布,H1 是均值 = 3 且标准差 = 1 的高斯分布)。
我构建了一个包含 30 个观察值的序列,在随机时间,我们从假设 H0 传递到 H1(我设置 batch_size = 30 因为我想在每个序列后重置 LSTM 层的状态,但我不知道它是否是一个合法的解决方案)。
我想尽快检测变化时间 H0 -> H1。
y_train 是一维 numpy.ndarray,如果观察类型为 H0,则包含 0,如果观察类型为 H1,则更改时间的延迟 + 1。
例如:
如果 change_time = 4
我想要作为输出:[0,0,0,0,1,2,3,4, etc...]
但是我的 RNN 显示这个:[0,0,0,0,8.674135, 8.674131, etc...]
似乎我的模型没有任何记忆,我不知道为什么...