我正在尝试使用Keras模型制作一个AI,学习如何打乒乓球。我当前模型接受的输入是agent.rect元组的列表,该列表取自pygame.Rect()函数和agent.rect.center以及我编码的机器人和游戏的球。我如何建立一种可以接受这种输入并输出适当结果的模型。
我已经尝试将input_dim从原始代码更改为18,但这是行不通的
这是我的模特
def network(self):
model = Sequential()
model.add(Dense(output_dim=120, activation='relu', input_dim=6))
model.add(Dropout(0.15))
model.add(Dense(output_dim=120, activation='relu'))
model.add(Dropout(0.15))
model.add(Dense(output_dim=120, activation='relu'))
model.add(Dropout(0.15))
model.add(Dense(output_dim=3, activation='softmax'))
opt = Adam(self.learning_rate)
model.compile(loss='mse', optimizer=opt)
return model
这是我尝试输入的状态
def get_state(self, pong, player, bot):
state = [player.rect, player.rect.center, pong.rect, pong.rect.center, bot.rect, bot.rect.center]
self.length = len(state)
return np.asarray(state)
这就是错误所在
print self.model.predict(np.array(next_state))
target = reward + self.gamma * np.amax(self.model.predict(np.array([next_state]))[0])
target_f = self.model.predict(np.array([state]))
target_f[0][np.argmax(action)] = target
self.model.fit(np.array([state]), target_f, epochs=1, verbose=0)
错误输出为ValueError:检查输入时出错:预期density_1_input具有形状(6,)但具有形状(1,)的数组
答案 0 :(得分:0)
尝试一下:
n_output = 3
def network(self):
model = Sequential()
model.add(Dense(6, input_dim=6, kernel_initializer='normal', activation='relu'))
model.add(Dense(4, kernel_initializer='normal', activation='relu'))
model.add(Dense(n_output, activation='softmax'))
opt = Adam(self.learning_rate)
model.compile(loss='mse', optimizer=opt)
return model