Conv1D 输入形状

时间:2021-03-17 20:03:04

标签: keras-layer

我有这个完美运行的代码。

input_shape = (1,3000,1000)
x = tf.random.normal(input_shape)
y = tf.keras.layers.Conv1D(32,3,activation='relu',input_shape=(3000,1000))(x)
print(y.shape)
<块引用>

(1, 2998, 32)

我想在此基础上构建一个顺序模型,但是当我尝试拟合时,它给了我维度上的错误。

让我们建立标签

l = np.random.randint(0,2,3000)

然后是模型和编译器

m =  tf.keras.models.Sequential([
    tf.keras.layers.Conv1D(32,3,activation='relu',input_shape=(3000,1000))
])
m.compile(optimizer='adam',metrics=['accuracy'],loss='categorical_crossentropy')

最后让我们拟合模型

m.fit(x,l,epochs=2)

错误

<块引用>

ValueError:数据基数不明确:x 大小:1 y 大小: 3000 确保所有数组包含相同数量的样本。

有人能帮我理解哪里出了问题吗?

2 个答案:

答案 0 :(得分:0)

您有 1 个训练样本和 3000 个标签。 x 和 y 的形状是,x = (1,3000,3000) : y = (3000)

答案 1 :(得分:0)

import tensorflow as tf
import numpy as np

x = tf.random.normal((3000,1000,1))
y = np.random.randint(1,2,3000)

tf.keras.layers.Conv1D(10,2,input_shape=(3000,1000))(x)

m=tf.keras.models.Sequential([
                              tf.keras.layers.Conv1D(10,2,input_shape=(1000,1)),
                              tf.keras.layers.Flatten(),
                              tf.keras.layers.Dense(1)
                              ])

m.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
m.fit(x,y,epochs=2)

在 Keras Conv1D 参考页面 Keras Conv1D 中,它写道:“当将此层用作模型中的第一层时,提供 input_shape 参数(整数元组或无,例如 (10, 128) 用于10 个 128 维向量的向量,或 (None, 128) 用于 128 维向量的可变长度序列。"

最终它可以工作,但是如果将 conv1d 插入到顺序模型中,则 input_shape 必须是 [0,1000,1]。我想是因为 Sequential 可以批量处理。