【发布时间】:2018-01-09 00:12:14
【问题描述】:
我目前正在实施强化学习算法,但 keras 似乎不想合作。在训练中,我为模型提供了一批数据,一切都按预期工作,但是当我想使用模型对单个数据点进行预测时,它只会一遍又一遍地输出相同的值(输入不同)。这是我的代码:
//网络初始化:
def initialize_actor(self):
state_variable_input = Input(shape=(3, ))
dense = Dense(16, activation="relu", kernel_initializer="lecun_uniform")(state_variable_input)
batch_norm1 = BatchNormalization()(dense)
dense2 = Dense(16, activation="relu", kernel_initializer="lecun_uniform")(batch_norm1)
batch_norm2 = BatchNormalization()(dense2)
output = Dense(1, activation=lecun_tanh, kernel_initializer=RandomUniform(-3e-3, 3e-3),
bias_initializer=RandomUniform(-3e-3, 3e-3))(batch_norm2)
model = Model(inputs=state_variable_input,
outputs=output)
model.compile(optimizer="adam", loss="mse")
return model, state_variable_input
//训练:
def train_actor(self, samples):
cur_state_var, action, reward, new_state_var = samples
predicted_actions = self.actor_model.predict([cur_state_var]) # shape of cur_state_var (batch_size, 3), predicts n = batch_size actions as intended
grads = self.sess.run(self.critic_grads, feed_dict={
self.critic_var_in: cur_state_var,
self.critic_action_in: predicted_action})[0]
summ, _ = self.sess.run([self.merged, self.optimize], feed_dict={
self.actor_var_in: cur_state_var,
self.actor_critic_grad: grads
})
self.writer.add_summary(summ)
//预测:
def act(self, cur_state_var):
if np.random.random() < self.epsilon:
return env.action_space.sample()
else:
action = self.actor_model.predict([cur_state_var], batch_size=1)[0] # shape of cur_state_var = (1,3), the network returns the same value for action at every call
return action
我希望我的错误可以在我认为与此相关的代码中的某个地方找到。我怀疑这与训练和预测时的不同批次大小有关。非常感谢您的宝贵时间!
【问题讨论】:
标签: tensorflow keras reinforcement-learning