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

时间:2018-03-12 15:55:33

标签: python tensorflow machine-learning neural-network keras

我正在尝试使用神经网络来预测在另一个文件中运行的汽车模拟器游戏的动作。我需要获得预测的一个动作进入游戏,但我正在努力做到这一点。在调用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 

1 个答案:

答案 0 :(得分:1)

当你想要一个可迭代的8维样本时,你正在为你的网络提供8个元素的列表。实际上:

>>> a = [currentLane, offRoad, collision, lane1, lane2, lane3, reward, a_action]
>>> a = np.array(a) # convert to a numpy array
>>> a = np.expand_dims(a, 0) # change shape from (8,) to (1,8)
>>> model.predict(a) # voila!