我有一个python 3.6.4脚本,这是一个基于4层MLP(输入,隐藏128,隐藏256,输出)的简单强化学习脚本。我不能在这里发布我的代码因为它太大了,我只发布它的一小部分。
def train(model, epochs):
total = 0
start = time.time()
entire_hist = []
profits = []
for i in range(epochs):
loss = 0
accuracy = 0
hist = []
env.reset()
game_over = False
input_t = env.observe()
while not game_over:
input_tm1 = input_t
if np.random.random() <= epsilon:
action = np.random.randint(0, num_actions, size=None)
else:
q = model.predict(input_tm1)
action = np.argmax(q[0])
input_t, reward, game_over = env.act(action)
exp_replay.remember([input_tm1, action, reward, input_t], game_over)
inputs, targets = exp_replay.get_batch(model, batch_size=batch_size)
loss, accuracy = model.train_on_batch(inputs, targets)
hist.append([loss, accuracy, env.main])
print(f'counter: {env.counter}, action taken: {action}, reward: {round(reward, 2)}, main: {round(env.main)}, secondary: {env.secondary}')
if game_over:
print('GAME OVER!')
entire_hist.append(hist)
profits.append(total)
print(f'total profit: {env.total_profit}')
print(f'epoch: {i}, loss: {loss}, accuracy: {accuracy}')
print('\n')
print('*'*20)
end = int(time.time() - start)
print(f'training time: {end} seconds')
return entire_hist, total
问题是,当我运行它时,CPU使用率仅为20-30%,GPU使用率约为5%。我尝试在不同的机器上运行,我得到了类似的结果,我使用的CPU越强大,脚本使用的%就越少。 没关系,除非在运行1000-5000个时期的情况下训练如此小的网络需要几天时间。有人可以帮助使它更快地训练并增加CPU使用率。 我尝试在exporflow的cpu / gpu版本上运行。 我的设置: 最新的keras with tensorflow后端 Tensorflow-GPU == 1.4.0
答案 0 :(得分:0)
实际上,它很简单,我只是使用了不是所有核心。由于我的系统将负载从一个核心分配给所有4个,我没有注意到。