keras RNN 3d张量输入和2d张量输出:检查模型目标

时间:2016-12-11 21:57:34

标签: tensorflow keras recurrent-neural-network lstm

我正在尝试使用LSTM来建模多样本时间序列数据。我的输入数据具有形状(100,93,6) - 100个独立的时间序列(来自相同/相似的过程),93个时间步长,每个观察6个维度。输出形状为(100,93) - 每个独立时间序列的每个时间步长一个bool输出。 (当然,这是一小部分真实数据)。但是,我无法弄清楚如何在Keras中构建这样一个网络:

from keras.models import Sequential
from keras.layers import LSTM, core, Activation, Dense
import numpy as np

data = np.load('sample.npz')
X = data['x']
y = data['y']
print('X shape: ',X.shape)
print('{} samples, {} time steps, {} observations at each time step, per sample\n'.format(*X.shape))

print('y shape: ',y.shape)
print('{} samples, {} time steps, boolean outcome per observation\n'.format(*y.shape))

print(X[0][2], X[0][55])
print(y[0][2], y[0][92])
  

X形:(100,93,6)100个样品,93个时间步,6个观察点   每个时间步,每个样本

     

y形状:(100,93)100个样本,93个时间步长,每个布尔结果   观察

     

[1.80000000e + 01 1.56000000e + 05 2.00000000e + 03 1.00000000e + 04      3.00000000e + 00 5.94000000e + 04] [0. 0. 0. 0. 0. 0。]

     

1.0 0.0

model = Sequential()
model.add(LSTM(output_dim=4, input_shape=(93, 6), return_sequences=False))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam')
model.fit(X, y, verbose=2)
  

异常:检查模型目标时出错:期望的密集_2   形状(无,1),但有阵列形状(100,93)

我相信Keras假设每个时间序列有一个输出(Y),而每个时间序列每个时间步有一个输出。如何让它在Keras中运作?

1 个答案:

答案 0 :(得分:2)

我错过了TimeDistributed图层.. 这有效:

model = Sequential()
model.add(LSTM(output_dim=4, input_shape=(93, 6), return_sequences=True))

model.add(TimeDistributed(Dense(1, activation='sigmoid')))
model.compile(loss='binary_crossentropy', optimizer='adam')