如何从model.predict()结果中获取单个值

我正在尝试使用神经网络来预测一款汽车模拟游戏的动作,该游戏在另一个文件中运行。我需要获取预测的动作值并传递给游戏,但我在这个过程中遇到了困难。在调用model.predict后,我尝试像访问数组一样获取值,但这返回了一个超出范围的错误。

我对Python的使用还比较新手,更不用说使用Keras了,但我的想法是神经网络将基于其他人玩游戏时收集的数据(保存在CSV文件中)进行训练。然后,当神经网络开始玩游戏时,我可以将每一帧的游戏值传入以生成预测的动作。我认为我已经完成了这一步,但无法获取预测的动作。以下是我的神经网络代码:

  def build_nn(self):    model = Sequential()    model.add(Dense(12, input_dim=8, activation='relu'))     model.add(Dense(8, activation='relu'))    model.add(Dense(1, activation='linear'))    model.compile(loss='mean_squared_error', optimizer=Adam(lr=self.learning_rate))    return model

这是我预测动作的代码(stateVector未被直接接受,所以我必须从中获取值)

 def action(self, stateVector):    a_action = stateVector['lastAction']    currentLane = stateVector['currentLane']    offRoad = stateVector['offRoad']    collision = stateVector['collision']    lane1 = stateVector['lane1Distance']    lane2 = stateVector['lane2Distance']    lane3 = stateVector['lane3Distance']    a = [currentLane, offRoad, collision, lane1, lane2, lane3, reward, a_action]       act_value = self.model.predict(a)    act = act_values[a_action]    return act 

回答:

你向网络输入了一个包含8个元素的列表,而它期望的是一个8维样本的可迭代对象。实际上:

>>> a = [currentLane, offRoad, collision, lane1, lane2, lane3, reward, a_action]>>> a = np.array(a) # 转换为numpy数组>>> a = np.expand_dims(a, 0) # 将形状从(8,)更改为(1,8)>>> model.predict(a) # 成功!

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注