如何解决为什么 DQNAgent.fit 会为我的输入数据添加额外的维度?
我正在使用 Keras 的一种深度 q 学习代理:DQNAgent。当我将环境传递给 DQNAgent.fit 时,收到以下错误:
**3 dqn.fit(env,nb_steps=50000,visualize=False,verbose=1)**
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training_utils_v1.py 在standardize_input_data(数据,名称,形状,check_batch_axis, 异常前缀)
655 ': expected ' + names[i] + ' to have ' +
656 str(len(shape)) + ' dimensions,but got array '
**657 'with shape ' + str(data_shape))**
658 if not check_batch_axis:
659 data_shape = data_shape[1:]
ValueError:检查输入时出错:预期的dense_18_input有 二维,但得到了形状为 (1,1,65) 的数组
我的环境状态和空间定义如下:
self.state = np.zeros(65,dtype=int)
self.action_space = spaces.Tuple((spaces.discrete(64),spaces.discrete(64)))
self.observation_space = spaces.Box(low=0,high=16,shape=(65,),dtype=np.int)
我正在使用以下模型:
states = env.observation_space.shape
actions = 64**2
def build_model(states,actions):
model = Sequential()
model.add(Dense(100,activation='relu',input_shape=states))
model.add(Dense(200,activation='relu'))
model.add(Dense(actions,activation='linear'))
return model
我环境的状态向量的形状为 (65,),但 fit 方法将其增强为 (1,65) -- 导致形状不匹配。需要明确的是,self.state 是作为对环境的观察返回的。有谁知道为什么会这样?
解决方法
首先,当您指定模型的输入时,Keras 会添加另一个维度,因为它需要一个 Batch。例如:
input_shape=(65,) --> (None,65)
因此,当您将单个观察结果转发到模型中时,Keras 会假设 batch_size=1
。因此,您的输入大小变为:
(None,65) --> (1,65)
现在,为了获得形状为 (1,1,65)
的输入,这意味着您喂食和观察尺寸为 batch_size + (1,65) = (1,65)
。这意味着出于某种原因,您的观察结果在实际输入网络之前被转置(重塑)。
在将其提供给网络之前,您是否检查了观察形状?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。