Keras:属性错误:'Adam'对象没有属性'_name'。

4

我想编译我的DQN智能体,但是出现了错误:AttributeError: 'Adam' object has no attribute '_name'

DQN = buildAgent(model, actions)
DQN.compile(Adam(lr=1e-3), metrics=['mae'])

我尝试添加假的_name,但它不起作用。我正在按照教程操作,而且在导师的电脑上可以运行。可能是一些新的更新变化导致的问题,但如何解决呢?

这是我的完整代码:

from keras.layers import Dense, Flatten
import gym
from keras.optimizer_v1 import Adam
from rl.agents.dqn import DQNAgent
from rl.policy import BoltzmannQPolicy
from rl.memory import SequentialMemory

env = gym.make('CartPole-v0')
states = env.observation_space.shape[0]
actions = env.action_space.n

episodes = 10

def buildModel(statez, actiones):
    model = Sequential()
    model.add(Flatten(input_shape=(1, statez)))
    model.add(Dense(24, activation='relu'))
    model.add(Dense(24, activation='relu'))
    model.add(Dense(actiones, activation='linear'))
    return model

model = buildModel(states, actions)

def buildAgent(modell, actionz):
    policy = BoltzmannQPolicy()
    memory = SequentialMemory(limit=50000, window_length=1)
    dqn = DQNAgent(model=modell, memory=memory, policy=policy, nb_actions=actionz, nb_steps_warmup=10, target_model_update=1e-2)
    return dqn

DQN = buildAgent(model, actions)
DQN.compile(Adam(lr=1e-3), metrics=['mae'])
DQN.fit(env, nb_steps=50000, visualize=False, verbose=1)

请添加完整代码,此代码没有任何错误。 - I'mahdi
1
@I'mahdi 好的,抱歉。 - Graverman
3个回答

3

您的错误来自于使用 from keras.optimizer_v1 import Adam 导入 Adam,您可以通过下面的代码解决问题:tf.keras.optimizers.Adam,要求使用 TensorFlow >= v2

(lr 参数已被弃用,最好使用 learning_rate 替代。)

# !pip install keras-rl2
import tensorflow as tf
from keras.layers import Dense, Flatten
import gym
from rl.agents.dqn import DQNAgent
from rl.policy import BoltzmannQPolicy
from rl.memory import SequentialMemory

env = gym.make('CartPole-v0')
states = env.observation_space.shape[0]
actions = env.action_space.n
episodes = 10

def buildModel(statez, actiones):
    model = tf.keras.Sequential()
    model.add(Flatten(input_shape=(1, statez)))
    model.add(Dense(24, activation='relu'))
    model.add(Dense(24, activation='relu'))
    model.add(Dense(actiones, activation='linear'))
    return model

def buildAgent(modell, actionz):
    policy = BoltzmannQPolicy()
    memory = SequentialMemory(limit=50000, window_length=1)
    dqn = DQNAgent(model=modell, memory=memory, policy=policy, 
                   nb_actions=actionz, nb_steps_warmup=10, 
                   target_model_update=1e-2)
    return dqn

model = buildModel(states, actions)
DQN = buildAgent(model, actions)
DQN.compile(tf.keras.optimizers.Adam(learning_rate=1e-3), metrics=['mae'])
DQN.fit(env, nb_steps=50000, visualize=False, verbose=1)

3

我的建议是,使用传统的Keras优化器!

#from tensorflow.keras.optimizers import Adam
from tensorflow.keras.optimizers.legacy import Adam

在我的情况下它可以工作。


1

#安装 keras==2.11.0

#安装 tensorflow==2.11.0

dqn.compile(tf.keras.optimizers.legacy.Adam(learning_rate=1e-3), metrics=['mae'])


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接