微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ValueError:检查输入时出错:预期dense_input有2维,但得到形状为(1, 1, 15)的数组

如何解决ValueError:检查输入时出错:预期dense_input有2维,但得到形状为(1, 1, 15)的数组

我正在尝试制作一个自定义的健身房环境,以便我可以在 Keras 网络中使用它。但是当我尝试拟合 de 神经网络时,我遇到了一个问题。

ValueError: Error when checking input: expected dense_6_input to have 2 dimensions,but got array with shape (1,1,15)

我对这个问题的理解是状态(网络接收的输入)被构造为一个 3 维数组,但我不知道为什么。

这是我在定义环境的类中的 init 方法

def __init__ (self):
    self.action_space = discrete (4)
    self.observation_space = Box(low=0,high=100,shape=(15,))
    self.state = np.array([1,2,3,4,0],dtype=float)
    #self.state = state
    self.length = 15
    self.index = 0

之后,我初始化了两个保存状态和动作形状的变量,这样我们就可以定义模型了。

states = env.observation_space.shape
actions = env.action_space.n

def build_model(states,actions):
model = Sequential()    
model.add(Dense(24,activation='relu',input_shape=states))
model.add(Dense(24,activation='relu'))
model.add(Dense(actions,activation='linear'))
return model

模型总结:

层(类型)输出形状参数#
密集_6(密集)(无,24)384
密集_7(密集)(无,24)600
密集_8(密集)(无,4)100

错误前的最后一步是在我构建代理时。之后,我们调用fit方法并出现问题。

def build_agent(model,actions):
   policy = BoltzmannQPolicy()
   memory = SequentialMemory(limit=50000,window_length=1)
   dqn = DQNAgent(model=model,memory=memory,policy=policy,nb_actions=actions,nb_steps_warmup=10,target_model_update=1e-2)
   return dqn

dqn = build_agent(model,actions)
dqn.compile(Adam(lr=1e-3),metrics=['mae'])
dqn.fit(env,nb_steps=50000,visualize=False,verbose=1)

我尝试将第一层的 input_shape 更改为 (1,15) 但似乎不起作用。也许问题与环境(观察空间)的定义或环境如何向网络提供信息有关。我不知道...

我希望你能帮助我。如果您需要更多信息来处理错误,请告诉我。

非常感谢!

解决方法

在您的情况下,输入形状应为 (1,15)。这是因为当 keras 分批处理输入时,实际输入形状增加了一个额外的维度,即您在 shape 中指定的维度,批量大小是第一个参数。

错误消息告诉您形状 (1,1,15) 的输入正在传递给模型(即批次 1,输入形状 (1,15),因此 ndims=3),但您只有 ndims=2。尽管只传递 (15,) 作为输入形状,请注意 ndims = 2。这是因为 Keras 为批次添加了额外的维度。

所以要修复,设置 shape=(1,15),然后将其处理为 (1,15),这是 Keras 所期望的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。