为什么运行keras.fit时会出现值错误?



我想训练AI玩breakout,但当我做DQN.fit(env, nb_steps=1000000, visualize=True, verbose=1)时发生以下错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
下面是我的代码:
import numpy as np
import tensorflow as tf
from rl.agents.dqn import DQNAgent
from rl.policy import LinearAnnealedPolicy, EpsGreedyQPolicy
from rl.memory import SequentialMemory
from keras.layers import Dense, Flatten, Convolution2D
env = gym.make('ALE/Breakout-v5', render_mode='rgb_array')
height, width, channels = env.observation_space.shape
actions = env.action_space.n
episodes = 10
for episode in range(1, episodes + 1):
    env.reset()
    done = False
    score = 0
def buildModel(height, width, channels, actions):
    model = tf.keras.Sequential()
    model.add(Convolution2D(32, (8, 8), strides=(4, 4), activation='relu', input_shape=(3,height, width, channels)))
    model.add(Convolution2D(64, (4, 4), strides=(2, 2), activation='relu'))
    model.add(Convolution2D(64, (3, 3), activation='relu'))
    model.add(Flatten())
    model.add(Dense(512, activation='relu'))
    model.add(Dense(256, activation='relu'))
    model.add(Dense(actions, activation='linear'))
    return model
def buildAgent(model, actions):
    policy = LinearAnnealedPolicy(EpsGreedyQPolicy(), attr='eps', value_max=1., value_min=.1, value_test=.2, nb_steps=10000)
    memory = SequentialMemory(limit=1000, window_length=3)
    dqn = DQNAgent(model=model, memory=memory, policy=policy,
                   enable_dueling_network=True, dueling_type='avg',
                   nb_actions=actions, nb_steps_warmup=1000)
    return dqn

model = buildModel(height, width, channels, actions)
DQN = buildAgent(model, actions)
DQN.compile(tf.keras.optimizers.Adam(learning_rate=1e-4), metrics=['mae'])
DQN.fit(env, nb_steps=1000000, visualize=True, verbose=1)
scores = DQN.test(env, nb_episodes=1000, visualize=True)
print(np.mean(scores.history['episode_reward']))

我使用

  • tensorflow: 2.8.0
  • keras = rl2上:1.0.4

完全错误:

  File "<input>", line 1, in <module>
  File "C:Program FilesJetBrainsPyCharm Community Edition 2021.2pluginspython-cehelperspydev_pydev_bundlepydev_umd.py", line 198, in runfile
    pydev_imports.execfile(filename, global_vars, local_vars)  # execute the script
  File "C:Program FilesJetBrainsPyCharm Community Edition 2021.2pluginspython-cehelperspydev_pydev_imps_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"n", file, 'exec'), glob, loc)
  File "D:/PycharmProjects/breakoutAI/main.py", line 43, in <module>
    DQN.fit(env, nb_steps=1000000, visualize=True, verbose=1)
  File "D:PycharmProjectsbreakoutAIvenvlibsite-packagesrlcore.py", line 182, in fit
    if not np.isreal(value):
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()```

我也有同样的问题。

我不知道为什么,但是使用render_mode="human">解决我的问题

env = gym.make('ALE/Breakout-v5', render_mode='human')

最新更新