在 keras returns 中调用加载模型预测每个动作的概率值而不是预测

calling predict on the loaded model in keras returns the probaility value of each action not the prediction

我正在用keras写一个强化学习程序。 该程序构建一个 NN 模型,然后使用该模型来预测情况。 ```def _build_model(self):

    model = Sequential()
    model.add(Dense(24,input_dim=self.state_size, activation='relu'))
    model.add(Dense(18, activation='relu'))
    model.add(Dense(self.action_size, activation ='linear'))
    model.compile(loss='mse', optimizer=Adam(lr=self.learning_rate))

    return model```

我在每一集中都使用 action = model.predict(state)。 最后我在退出程序之前使用 keras.save(name) 保存模型。 正如我提到的,我在游戏的每一集中使用 model.predict() 来 select 一个动作,它 returns 8 个动作中的一个动作 [0 到 7]

但是如果我写一段代码并使用 keras.models.load_model(name) 然后调用 action = model.predict(state),它 returns 一个包含 8 个元素的数组,它们是每个动作的概率,而不是期望的 selected 动作。

我需要补充一点,如果我不想保存模型以便稍后部署和使用它,它工作正常。所有的结果和输出听起来都是合乎逻辑的,但如果我决定保存它以备后用,只是将它放在新环境中并采取行动,我不能像上面解释的那样。 我该如何解决这个问题? 预先感谢您的帮助。

这就是 predict() 实际上的工作方式,它 returns 的概率。将这些概率映射到您的 类(标签)是您的工作。知道预测映射到您的输入 类(按顺序),您可以找出最大概率的索引。

简单示例:

predictions = [0.1, 0.3, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
np.argmax(x) # Returns 1

注意:这是为了防止你的输出是概率!问题有点误导。