Keras Conv1D 输入是如何指定的?我似乎缺乏维度
How is the Keras Conv1D input specified? I seem to be lacking a dimension
我的输入是一个包含 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)
的输入。查看文档了解更多 information:
time_steps = 5
model = 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)
.
如果你想使用字符 1 热编码嵌入,它看起来像这样:
这是一个单一样本的简单示例,其形状为 (10, 10)
--> 时间序列维度上的 10 个字符和 10 个特征。它应该可以帮助您更好地理解我提到的教程。
Conv1D层做时间卷积,也就是沿着第一个维度(当然不是batch维度),所以你应该这样写:
time_steps = 5
model = tf.keras.Sequential()
model.add(tf.keras.layers.Input(shape=(time_steps, 64), name="input"))
model.add(tf.keras.layers.Conv1D(64, 2, activation="relu", padding="same", name="convLayer"))
您需要将您的数据分割成 time_steps 个时间片来为网络提供数据。
但是,如果您的数组没有时间结构,则 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)
的输入。查看文档了解更多 information:
time_steps = 5
model = 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)
.
如果你想使用字符 1 热编码嵌入,它看起来像这样:
这是一个单一样本的简单示例,其形状为 (10, 10)
--> 时间序列维度上的 10 个字符和 10 个特征。它应该可以帮助您更好地理解我提到的教程。
Conv1D层做时间卷积,也就是沿着第一个维度(当然不是batch维度),所以你应该这样写:
time_steps = 5
model = tf.keras.Sequential()
model.add(tf.keras.layers.Input(shape=(time_steps, 64), name="input"))
model.add(tf.keras.layers.Conv1D(64, 2, activation="relu", padding="same", name="convLayer"))
您需要将您的数据分割成 time_steps 个时间片来为网络提供数据。
但是,如果您的数组没有时间结构,则 conv1D 不是您要查找的层。