time_distributed lstm的Y标签形状

时间:2018-08-01 09:22:18

标签: python-3.x machine-learning lstm keras-layer

我的数据的形状(样本,窗口,特征数量):

X_train (3620, 3, 43)  
y_train (3620, 1) 
X_test  (905, 3, 43)   
y_test  (905, 1)

这是我的模特:

model = Sequential()
model.add(Bidirectional(LSTM(448, input_shape = (3, 43), activation = 'relu', 
                        return_sequences=True))) 
model.add(Dropout(dropout_rate1))
model.add(Bidirectional(LSTM(256, activation = 'relu', return_sequences = True))) 
model.add(Dropout(dropout_rate2))
model.add(TimeDistributed(Dense(64, kernel_initializer = 'uniform', 
                                activation = 'relu')))    
model.add(TimeDistributed(Dense(nOut, kernel_initializer = 'uniform', 
                                activation = 'linear', 
                                kernel_regularizer = regularizers.l2(regu))))
model.compile(optimizer = 'adam', loss = 'mse', metrics = ['accuracy'])

net_history = model.fit(X_train, y_train, batch_size = batch_size, epochs = num_epochs, 
                        verbose = 0, validation_split = val_split, shuffle = 
                        True, callbacks = [best_model, early_stop])

我收到此错误:

ValueError: 检查目标时出错:预期time_distributed_4具有3个维度,但数组的形状为(3620,1)

我的X_train是使用3的移动窗口完成的。因此,每1 y_train标签需要3步X。错误似乎告诉我我的y_train应该是(3620,3,1),我读对了吗?

如果是的话,这里的逻辑或我应该应用的逻辑是什么,因为X_train中的每3步变为1 y_train,我如何将其更改为3步至3 y?所以所有的3年都一样吗?让我举一个例子,以便我清楚地说明自己。

当前X_train =

[[[[1,2,3 ..... 43]

[1、2、3 ..... 43]

[1、2、3 ..... 43]]

...

[[1、2、3 ..... 43]

[1、2、3 ..... 43]

[1、2、3 ..... 43]]]

当前y_train = [[1] ..... [3620]]

y_train应该成为下面的它吗?  [[[1],[1],[1]] ..... [[3620],[3620],[3620]]]

非常感谢。

0 个答案:

没有答案