Прежде чем опубликовать это, я попытался решить проблему путем поиска ответов, включая ссылку на этот вопрос StackOverflow: символические входные данные Keras /outputs не реализует __len__, но мне так и не удалось решить проблему.
Я использую следующие версии библиотек:
- TensorFlow: 2.10.1
Keras-RL: 0.4.2
import numpy as np
import random
import pygame
import gym
from rl.memory import SequentialMemory
from rl.policy import BoltzmannQPolicy
from rl.agents.dqn import DQNAgent
from keras.layers import Dense, Flatten
import tensorflow as tf
env = gym.make("CartPole-v1", render_mode="rgb_array")
states = env.observation_space.shape[0]
actions = env.action_space.n
def build_model(states, actions):
model = tf.keras.Sequential()
model.add(Dense(24, activation='relu', input_shape=(states,)))
model.add(Dense(24, activation='relu'))
model.add(Dense(actions, activation='linear'))
model.build((None, states))
return model
def buildAgent(model, actions):
policy = BoltzmannQPolicy()
memory = SequentialMemory(limit=50000, window_length=1)
dqn = DQNAgent(model, memory=memory, policy=policy, nb_actions=actions, nb_steps_warmup=10,
target_model_update=1e-2)
return dqn
model = build_model(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)
scores = DQN.test(env, nb_episodes=100, visualize=True)
print(np.mean(scores.history['episode_reward']))
model.save('model.h5')
Подробнее здесь: https://stackoverflow.com/questions/791 ... -2-symboli
Мобильная версия