如何指定Keras的Conv1D输入?我似乎缺少一个维度

我的输入是一个包含64个整数的数组。

model = Sequential()model.add( Input(shape=(68,), name="input"))model.add(Conv1D(64, 2, activation="relu", padding="same", name="convLayer"))

我的训练集中有10,000个这样的数组。我应该怎样指定它们才能让Conv1D工作呢?

我遇到了可怕的

ValueError: Input 0 of layer convLayer is incompatible with the layer: : expected min_ndim=3, found ndim=2. Full shape received: [None, 68]

错误,我实在不明白我需要做什么。


回答:

不要被名称所迷惑。层 tf.keras.layers.Conv1D 需要以下形状: (time_steps, features)。如果你的数据集由 10,000 个样本组成,每个样本包含 64 个值,那么你的数据形状为 (10000, 64),这并不能直接应用于 tf.keras.layers.Conv1D 层。你缺少 time_steps 维度。你可以使用 tf.keras.layers.RepeatVector,它可以重复你的数组输入 n 次,例如 5 次。这样你的 Conv1D 层就会接收到形状为 (5, 64) 的输入。请查看文档以获取更多信息

time_steps = 5model = tf.keras.Sequential()model.add(tf.keras.layers.Input(shape=(64,), name="input"))model.add(tf.keras.layers.RepeatVector(time_steps))model.add(tf.keras.layers.Conv1D(64, 2, activation="relu", padding="same", name="convLayer"))

顺便提一下,你应该问自己使用 tf.keras.layers.Conv1D 层是否适合你的用例。这个层通常用于NLP和其他时间序列任务。例如,在句子分类中,句子中的每个单词通常被映射到一个高维的词向量表示,如图所示。这会产生形状为 (time_steps, features) 的数据。

                                          enter image description here

如果你想使用字符的一热编码嵌入,它看起来会像这样:

                                          enter image description here

这是一个单一样本的简单示例,形状为 (10, 10) –> 时间序列维度上有10个字符和10个特征。这应该能帮助你更好地理解我提到的教程。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注