在 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
注意:这是为了防止你的输出是概率!问题有点误导。
我正在用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
注意:这是为了防止你的输出是概率!问题有点误导。