ValueError: Input 0 of layer "max_pooling2d" is incompatible with the layer: expected ndim=4, found ndim=5. Full shape received: (None, 3, 51, 39, 32)
ValueError: Input 0 of layer "max_pooling2d" is incompatible with the layer: expected ndim=4, found ndim=5. Full shape received: (None, 3, 51, 39, 32)
我有两个不同的问题同时出现。
我在使用 MaxPooling2d 时遇到维数问题并且在使用 DQNAgent 时遇到相同的维数问题。
问题是,我可以单独修复它们,但不能同时修复它们。
第一个问题
我正在尝试构建一个多层的 CNN 网络。在我构建模型后,当我尝试 运行 它时,它给我一个错误。
!pip install PyOpenGL==3.1.* PyOpenGL-accelerate==3.1.*
!pip install tensorflow gym keras-rl2 gym[atari] keras pyvirtualdisplay
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, Convolution2D, MaxPooling2D, Activation
from keras_visualizer import visualizer
from tensorflow.keras.optimizers import Adam
env = gym.make('Boxing-v0')
height, width, channels = env.observation_space.shape
actions = env.action_space.n
input_shape = (3, 210, 160, 3) ## input_shape = (batch_size, height, width, channels)
def build_model(height, width, channels, actions):
model = Sequential()
model.add(Convolution2D(32, (8,8), strides=(4,4), activation="relu", input_shape=input_shape, data_format="channels_last"))
model.add(MaxPooling2D(pool_size=(2, 2), data_format="channels_last"))
model.add(Convolution2D(64, (4,4), strides=(1,1), activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2), data_format="channels_last"))
model.add(Convolution2D(64, (3,3), activation="relu"))
model.add(Flatten())
model.add(Dense(512, activation="relu"))
model.add(Dense(256, activation="relu"))
model.add(Dense(actions, activation="linear"))
return model
model = build_model(height, width, channels, actions)
它给出以下错误:
ValueError: Input 0 of layer "max_pooling2d_12" is incompatible with the layer: expected ndim=4, found ndim=5. Full shape received: (None, 3, 51, 39, 32)
第二题
我的 input_shape
是 (3, 210, 160, 3)
。我故意使用前 3 个,因为我必须在之前指定 batch_size
。如果我之前没有指定它并将它作为 (210, 160, 3)
传递给 build_model
函数,下面的 build_agent
函数会给我另一个错误:
def build_agent(model, actions):
policy = LinearAnnealedPolicy(EpsGreedyQPolicy(), attr="eps", value_max=1., value_min=.1, value_test=.2, nb_steps=10000)
memory = SequentialMemory(limit=1000, window_length=3)
dqn = DQNAgent(model=model, memory=memory, policy=policy,
enable_dueling_network=True, dueling_type="avg",
nb_actions=actions, nb_steps_warmup=1000)
return dqn
dqn = build_agent(model, actions)
dqn.compile(Adam(learning_rate=1e-4))
dqn.fit(env, nb_steps=10000, visualize=False, verbose=1)
ValueError: Error when checking input: expected conv2d_11_input to have 4 dimensions, but got array with shape (1, 3, 210, 160, 3)
在模型构建阶段删除批量大小,消除了 MaxPooling2D 不兼容错误,但抛出 DQNAgent 维数错误。将批量大小添加到模型构建阶段可消除 DQNAgent 维度错误,但会引发 MaxPooling2D 不兼容错误。
我真的卡住了
input_shape 有问题。 input_shape=input_shape[1:]
工作示例代码
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, Convolution2D, MaxPooling2D, Activation
from tensorflow.keras.optimizers import Adam
input_shape = (3, 210, 160, 3)
model = Sequential()
model.add(Convolution2D(32, (8,8), strides=(4,4), activation="relu", input_shape=input_shape[1:], data_format="channels_last"))
model.add(MaxPooling2D(pool_size=(2,2), data_format="channels_last"))
model.add(Convolution2D(64, (4,4), strides=(1,1), activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2), data_format="channels_last"))
model.add(Convolution2D(64, (3,3), activation="relu"))
model.add(Flatten())
model.add(Dense(512, activation="relu"))
model.add(Dense(256, activation="relu"))
model.add(Dense(2, activation="linear"))
model.summary()
输出
Model: "sequential_7"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_9 (Conv2D) (None, 51, 39, 32) 6176
max_pooling2d_5 (MaxPooling (None, 25, 19, 32) 0
2D)
conv2d_10 (Conv2D) (None, 22, 16, 64) 32832
max_pooling2d_6 (MaxPooling (None, 11, 8, 64) 0
2D)
conv2d_11 (Conv2D) (None, 9, 6, 64) 36928
flatten_1 (Flatten) (None, 3456) 0
dense_4 (Dense) (None, 512) 1769984
dense_5 (Dense) (None, 256) 131328
dense_6 (Dense) (None, 2) 514
=================================================================
Total params: 1,977,762
Trainable params: 1,977,762
Non-trainable params: 0
我有两个不同的问题同时出现。
我在使用 MaxPooling2d 时遇到维数问题并且在使用 DQNAgent 时遇到相同的维数问题。
问题是,我可以单独修复它们,但不能同时修复它们。
第一个问题
我正在尝试构建一个多层的 CNN 网络。在我构建模型后,当我尝试 运行 它时,它给我一个错误。
!pip install PyOpenGL==3.1.* PyOpenGL-accelerate==3.1.*
!pip install tensorflow gym keras-rl2 gym[atari] keras pyvirtualdisplay
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, Convolution2D, MaxPooling2D, Activation
from keras_visualizer import visualizer
from tensorflow.keras.optimizers import Adam
env = gym.make('Boxing-v0')
height, width, channels = env.observation_space.shape
actions = env.action_space.n
input_shape = (3, 210, 160, 3) ## input_shape = (batch_size, height, width, channels)
def build_model(height, width, channels, actions):
model = Sequential()
model.add(Convolution2D(32, (8,8), strides=(4,4), activation="relu", input_shape=input_shape, data_format="channels_last"))
model.add(MaxPooling2D(pool_size=(2, 2), data_format="channels_last"))
model.add(Convolution2D(64, (4,4), strides=(1,1), activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2), data_format="channels_last"))
model.add(Convolution2D(64, (3,3), activation="relu"))
model.add(Flatten())
model.add(Dense(512, activation="relu"))
model.add(Dense(256, activation="relu"))
model.add(Dense(actions, activation="linear"))
return model
model = build_model(height, width, channels, actions)
它给出以下错误:
ValueError: Input 0 of layer "max_pooling2d_12" is incompatible with the layer: expected ndim=4, found ndim=5. Full shape received: (None, 3, 51, 39, 32)
第二题
我的 input_shape
是 (3, 210, 160, 3)
。我故意使用前 3 个,因为我必须在之前指定 batch_size
。如果我之前没有指定它并将它作为 (210, 160, 3)
传递给 build_model
函数,下面的 build_agent
函数会给我另一个错误:
def build_agent(model, actions):
policy = LinearAnnealedPolicy(EpsGreedyQPolicy(), attr="eps", value_max=1., value_min=.1, value_test=.2, nb_steps=10000)
memory = SequentialMemory(limit=1000, window_length=3)
dqn = DQNAgent(model=model, memory=memory, policy=policy,
enable_dueling_network=True, dueling_type="avg",
nb_actions=actions, nb_steps_warmup=1000)
return dqn
dqn = build_agent(model, actions)
dqn.compile(Adam(learning_rate=1e-4))
dqn.fit(env, nb_steps=10000, visualize=False, verbose=1)
ValueError: Error when checking input: expected conv2d_11_input to have 4 dimensions, but got array with shape (1, 3, 210, 160, 3)
在模型构建阶段删除批量大小,消除了 MaxPooling2D 不兼容错误,但抛出 DQNAgent 维数错误。将批量大小添加到模型构建阶段可消除 DQNAgent 维度错误,但会引发 MaxPooling2D 不兼容错误。
我真的卡住了
input_shape 有问题。 input_shape=input_shape[1:]
工作示例代码
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, Convolution2D, MaxPooling2D, Activation
from tensorflow.keras.optimizers import Adam
input_shape = (3, 210, 160, 3)
model = Sequential()
model.add(Convolution2D(32, (8,8), strides=(4,4), activation="relu", input_shape=input_shape[1:], data_format="channels_last"))
model.add(MaxPooling2D(pool_size=(2,2), data_format="channels_last"))
model.add(Convolution2D(64, (4,4), strides=(1,1), activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2), data_format="channels_last"))
model.add(Convolution2D(64, (3,3), activation="relu"))
model.add(Flatten())
model.add(Dense(512, activation="relu"))
model.add(Dense(256, activation="relu"))
model.add(Dense(2, activation="linear"))
model.summary()
输出
Model: "sequential_7"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_9 (Conv2D) (None, 51, 39, 32) 6176
max_pooling2d_5 (MaxPooling (None, 25, 19, 32) 0
2D)
conv2d_10 (Conv2D) (None, 22, 16, 64) 32832
max_pooling2d_6 (MaxPooling (None, 11, 8, 64) 0
2D)
conv2d_11 (Conv2D) (None, 9, 6, 64) 36928
flatten_1 (Flatten) (None, 3456) 0
dense_4 (Dense) (None, 512) 1769984
dense_5 (Dense) (None, 256) 131328
dense_6 (Dense) (None, 2) 514
=================================================================
Total params: 1,977,762
Trainable params: 1,977,762
Non-trainable params: 0