我正在尝试使用拟合生成器拟合LSTM,因为我的数据是稀疏矩阵的数组,因此我需要向网络提供非稀疏矩阵。
我的数据形状为(835027,) 每个实例都是大小为17321的稀疏矩阵。
这是我的代码
def fit_by_batch(X, y, batch_size):
n_batches_for_epoch = X.shape[0]//batch_size
for i in range(n_batches_for_epoch):
index_batch = range(X.shape[0])[batch_size*i:batch_size*(i+1)]
X_batch =X[index_batch][0].toarray()[0] #from sparse to array
X_batch=X_batch.reshape(1,X_batch.shape[0],1 ) # to 3d array
y_batch = y[index_batch,][0]
yield(numpy.array(X_batch),y_batch)
model.fit_generator(generator=fit_by_batch(train_X, train_y, 10),steps_per_epoch=835027,nb_epoch=4)
model.add(LSTM(neurons, batch_input_shape=(10,17321,835027), stateful=True, return_sequences=True))
这给出了以下错误
ValueError: Error when checking input: expected lstm_1_input to have shape (17321, 835027) but got array with shape (17321, 1)
我猜是因为我的生成器返回了形状数组(17321,1) 我尝试将输入形状中的835027更改为1,并将批次也更改为1,它可以正常工作,但我想处理更大的批次
我在做什么错?我真的无法弄清楚我的错误