我有这个完美运行的代码。
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 确保所有数组包含相同数量的样本。
有人能帮我理解哪里出了问题吗?
答案 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 可以批量处理。