You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

设置verbose=0未生效:Deep Q-Learning训练仍输出日志

解决Keras model.fit(verbose=0)仍输出训练信息的问题

你看到的输出并非来自model.fit(),而是循环中两次model.predict()调用产生的——Keras的predict()方法默认verbose=1,会打印单batch的进度条信息。

解决方案

在所有model.predict()调用中添加verbose=0参数,即可抑制该输出:

修改replay()函数中的predict代码:

def replay(self, batch_size):
    # training
    if len(self.memory) < batch_size:
        return
    mini_batch = random.sample(self.memory, batch_size)
    for state, action, reward, next_state, done in mini_batch:
        if done:
            target = reward
        else:
            # 给predict添加verbose=0
            target = reward + self.gamma * np.amax(self.model.predict(next_state, verbose=0)[0])
        # 给predict添加verbose=0
        train_target = self.model.predict(state, verbose=0)
        train_target[0][action] = target
        self.model.fit(state, train_target, epochs=1, verbose=0)

额外优化建议

当前循环中每次迭代都单独调用predict和fit,效率较低。可以尝试批量处理所有样本的state和next_state,一次性完成predict操作,既减少冗余的IO输出,也能提升训练速度:

def replay(self, batch_size):
    if len(self.memory) < batch_size:
        return
    mini_batch = random.sample(self.memory, batch_size)
    
    # 批量提取state、next_state
    states = np.array([x[0] for x in mini_batch])
    next_states = np.array([x[3] for x in mini_batch])
    
    # 一次性批量predict
    state_preds = self.model.predict(states, verbose=0)
    next_state_preds = self.model.predict(next_states, verbose=0)
    
    for i, (state, action, reward, next_state, done) in enumerate(mini_batch):
        if done:
            target = reward
        else:
            target = reward + self.gamma * np.amax(next_state_preds[i])
        state_preds[i][action] = target
    
    # 批量fit
    self.model.fit(states, state_preds, epochs=1, verbose=0)

内容的提问来源于stack exchange,提问作者Don Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 18:30:41