Conv 1d 及其输入

Conv 1d and its input

我有一个形状为 (273, 168) 的 numpy 数组,所以有 273 个样本,每个样本有 168 个观察值。

我想要输出 273 数组,包含 24 个观测值。

为什么我的代码给我一个模糊差异的问题?

x = np.random.randint(0,1,(273,168))
y = np.random.randint(0,1,(273,24))


model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv1D(7, activation='relu', kernel_size=(3), input_shape=(168,273)))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(24))


model.compile(loss=tf.losses.MeanSquaredError(),
            optimizer=tf.optimizers.Adam(),
            metrics=[tf.metrics.MeanAbsoluteError()])

model.fit(x,y))

model.predcit(x[42])

谁能帮帮我?

如果你检查你得到的错误信息,你可以看到所需的维数是 3,你传递的只是 2([​​=20=],n_features),你需要重塑您使用 .reshape(n_samples, 1, n_features) 的数据您的 input_shape 也不正确。

最后,您需要设置padding='same',否则您的输入数据将超出维度。 (您可以尝试 运行 而不将 padding 设置为相同,看看会出现什么错误)

此代码有效:

x = np.random.randint(0,1,(273,168)).reshape(273, 1, 168)
y = np.random.randint(0,1,(273,24)).reshape(273, 1, 24)

model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv1D(7, activation='relu', kernel_size=(3), padding='same', input_shape=(1,168)))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(24))


model.compile(loss=tf.losses.MeanSquaredError(),
            optimizer=tf.optimizers.Adam(),
            metrics=[tf.metrics.MeanAbsoluteError()])

model.fit(x,y)