RL算法的缓慢训练和低CPU使用率

时间:2018-05-22 03:32:11

标签: machine-learning keras python-3.6

我有一个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

1 个答案:

答案 0 :(得分:0)

实际上,它很简单,我只是使用了不是所有核心。由于我的系统将负载从一个核心分配给所有4个,我没有注意到。