我该如何解决这个与 Keras 的 Conv2D 相关的问题?
How can I fix this problem related to Conv2D of Keras?
我创建了以下神经网络:
model = keras.Sequential()
model.add(layers.Conv2D(3, (3,3), activation="relu", padding="same", input_shape=constants.GRID_SHAPE))
model.add(layers.MaxPooling2D((3,3)))
model.add(layers.Flatten())
model.add(layers.Dense(constants.NUM_ACTIONS), activation="softmax")
其中 constants.GRID_SHAPE
是 (4,12).
我收到以下错误:
ValueError: Input 0 of layer "conv2d" is incompatible with the layer: expected min_ndim=4, found ndim=3. Full shape received: (None, 4, 12)
我该如何解决这个问题?
如果您打算使用 Conv2D
层,请确保您有一个不包括批量大小的 3D 输入形状。当前您有一个 2D 输入形状。还要确保激活函数 softmax
是 Dense
层的一部分:
import tensorflow as tf
model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv2D(3, (3,3), activation="relu", padding="same", input_shape=(4, 12, 1)))
model.add(tf.keras.layers.MaxPooling2D((3,3)))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(5, activation="softmax"))
如果您的输入数据的形状是 (samples, 4, 12)
,您可以使用 data = tf.expand_dims(data, axis=-1)
为您的数据添加一个额外的维度,使其与 Conv2D
层兼容。
如果您不想添加新维度,您也可以简单地使用 Conv1D
图层:
import tensorflow as tf
model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv1D(3, 3, activation="relu", padding="same", input_shape=(4, 12)))
model.add(tf.keras.layers.MaxPooling1D(3))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(5, activation="softmax"))
我创建了以下神经网络:
model = keras.Sequential()
model.add(layers.Conv2D(3, (3,3), activation="relu", padding="same", input_shape=constants.GRID_SHAPE))
model.add(layers.MaxPooling2D((3,3)))
model.add(layers.Flatten())
model.add(layers.Dense(constants.NUM_ACTIONS), activation="softmax")
其中 constants.GRID_SHAPE
是 (4,12).
我收到以下错误:
ValueError: Input 0 of layer "conv2d" is incompatible with the layer: expected min_ndim=4, found ndim=3. Full shape received: (None, 4, 12)
我该如何解决这个问题?
如果您打算使用 Conv2D
层,请确保您有一个不包括批量大小的 3D 输入形状。当前您有一个 2D 输入形状。还要确保激活函数 softmax
是 Dense
层的一部分:
import tensorflow as tf
model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv2D(3, (3,3), activation="relu", padding="same", input_shape=(4, 12, 1)))
model.add(tf.keras.layers.MaxPooling2D((3,3)))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(5, activation="softmax"))
如果您的输入数据的形状是 (samples, 4, 12)
,您可以使用 data = tf.expand_dims(data, axis=-1)
为您的数据添加一个额外的维度,使其与 Conv2D
层兼容。
如果您不想添加新维度,您也可以简单地使用 Conv1D
图层:
import tensorflow as tf
model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv1D(3, 3, activation="relu", padding="same", input_shape=(4, 12)))
model.add(tf.keras.layers.MaxPooling1D(3))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(5, activation="softmax"))