我正在创建一个对字母序列进行分类的二进制分类器,例如'BA'。 每个序列由2个字母组成,这些字母被编码为“一键热”向量。例如,序列“ BA”为 (这些序列在我的原始代码中更长,但我想让问题保持简单) 我是机器学习的新手,之前我做了一些工作,但仅使用简单输入。我正在努力了解如何将多维输入传递到我的网络中。我需要以某种方式展平吗? 我在这里创建了一个最小可重复的示例- https://www.dropbox.com/s/dhg3huw6bh7dfjd/Example.py?dl=0, 在我提供的代码中,整个数据集如下: 这是一个二进制分类器,这些序列的目标是: 如果运行我提供的代码,则会出现此错误: 如果有人可以帮助您弄清楚如何正确地将序列传递到我的网络中,那就太好了。谢谢:) 答案 0 :(得分:1) 这是罪魁祸首。 LSTM要求3维输入。在您的情况下,您尝试传递4维输入(请记住Keras为输入形状添加了额外的批处理尺寸)。因此,摆脱第一个 只需将其更改为[[0, 1, 0, 0], [1, 0, 0, 0]]
。 Sequences
仅包含3个训练数据示例,以使其简单。我只需要帮助确定如何将3d输入传递到模型中即可。Sequences = [ [[0, 1, 0, 0], [1, 0, 0, 0]] , [[0, 1, 0, 0], [1, 0, 0, 0]] , [[0, 0, 0, 1], [0, 1, 0, 0]] ]
Targets = [1.0, 1.0, 0.0]
ValueError: Input 0 of layer lstm is incompatible with the layer: expected ndim=3, found ndim=4. Full shape received: [None, 2, 2, 4]
1 个答案:
2
可以解决您的问题。model.add(LSTM(128,
input_shape=(2, 2, 4), return_sequences=True))
model.add(LSTM(128,
input_shape=(2, 4), return_sequences=True))