python - Keras LSTM TensorFlow错误: 'Shapes must be equal rank, but are 1 and 0'

标签 python tensorflow keras lstm recurrent-neural-network

我正在尝试创建一个 Keras LSTM(请注意,我是 Keras 中的 LSTM 和 RNN 新手)。神经网络应该输入 4116 个值,并输出 4116 个值。这需要 288 个时间步长完成。我有 27 个这样的时间步(我意识到这可能会导致过度拟合;我有一个更大的数据集,但首先想用 27 个训练示例来测试我的代码)。

训练数据存储在两个numpy数组xy中。这些变量的形状为(27, 288, 4116)

我的代码:

datapoints = data.get.monthPoints(2, year)
x, y = datapoints[:-1], datapoints[1:]
del datapoints

input_shape = x.shape[1:]
output_shape = y.shape[1:]

checkpoint = ModelCheckpoint('model/files/alpha.h5', monitor='val_loss', verbose=1, save_best_only=True, mode='auto', period=1)
early = EarlyStopping(monitor='val_loss', min_delta=0, patience=1, verbose=1, mode='auto')

model = Sequential()
model.add(LSTM(5488, activation='relu', input_shape=input_shape))
model.add(RepeatVector(output_shape))
model.add(LSTM(5488, activation='relu', return_sequences=True))
model.add(TimeDistributed(Dense(output_shape)))

model.compile(loss='mse', optimizer='adam')
model.fit(x, y, epochs=100, batch_size=8, callbacks = [checkpoint, early])

当我运行该程序时,出现以下错误:

tensorflow.python.framework.errors_impl.InvalidArgumentError: Shapes must be equal rank, but are 1 and 0
        From merging shape 1 with other shapes. for 'repeat_vector/stack_1' (op: 'Pack') with input shapes: [], [2], []

During handling of the above exception, another exception occurred:
ValueError: Shapes must be equal rank, but are 1 and 0
        From merging shape 1 with other shapes. for 'repeat_vector/stack_1' (op: 'Pack') with input shapes: [], [2], []

我见过其他一些类似的问题,例如 thisthis ,但他们没有提供解决我的问题的解决方案,或者解决方案不清楚。

我想我的问题与我错误地构建网络或错误地格式化数据有关。

任何见解我都会非常感激。

谢谢。

最佳答案

您的代码中有两个问题。首先,在 RepeatVector 中,您通过传递 y.shape[1:] 来发送列表。在 RepeatVector 中,您应该发送一个整数。

第二个问题出现在TimeDistributed中。发送您希望第二维度重复的次数。 所以你的代码应该是:

repeat_vector_units = x.shape[1]
output_units = x.shape[2]

model = Sequential()
model.add(LSTM(5488, activation='relu', input_shape=input_shape))
model.add(RepeatVector(repeat_vector_units))        ### Change here
model.add(LSTM(5488, activation='relu', return_sequences=True))
model.add(TimeDistributed(Dense(output_units)))     #### Change here

关于python - Keras LSTM TensorFlow错误: 'Shapes must be equal rank, but are 1 and 0' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57541947/

相关文章:

variables - Tensorflow 节点可以有别名吗?

python - 准确度表现良好,但图像分割中的 Dice 损失较差

python - Keras multi_gpu_model 错误 : "swig/python detected a memory leak of type ' int64_t *', no destructor found"

python-3.x - Python - 基于 LSTM 的 RNN 需要 3D 输入?

python - 显示找到的文件数和进度

python - 如何使用 django-storages 在 dropbox 上进行媒体存储?

TensorFlow:使用不同的输入张量重新运行网络?

tensorflow - 具有多输入 KerasClassifier 的 Sklearn cross_val_score

python - 在 Mac Snow Leopard 上处理系统 python 和 python 27 的问题

python - 如何在 Simulink 的 MATLAB 函数中索引数组值?