TypeError : len은 기호 텐서에 대해 잘 정의되어 있지 않습니다. (activation_3 / Identity : 0) 모양 정보는`len (x)`대신`x.shape`를 호출하십시오.


10

openAI 체육관의 한 게임에서 DQL 모델을 구현하려고합니다. 그러나 다음과 같은 오류가 발생합니다.

TypeError : len은 기호 텐서에 대해 잘 정의되어 있지 않습니다. (activation_3 / Identity : 0) 모양 정보 x.shape보다는 전화 len(x)하십시오.

체육관 환경 만들기 :

ENV_NAME = 'CartPole-v0'

env = gym.make(ENV_NAME)
np.random.seed(123)
env.seed(123)
nb_actions = env.action_space.n

내 모델은 다음과 같습니다

model = Sequential()
model.add(Flatten(input_shape=(1,) + env.observation_space.shape))
model.add(Dense(16))
model.add(Activation('relu'))
model.add(Dense(nb_actions))
model.add(Activation('linear'))
print(model.summary())

keral-rl의 DQN 모델에 해당 모델을 다음과 같이 피팅합니다.

policy = EpsGreedyQPolicy()
memory = SequentialMemory(limit=50000, window_length=1)
dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=10, target_model_update=0.001, policy=policy)
dqn.compile(Adam(lr=1e-3), metrics=['mse', 'mae'])
dqn.fit(env, nb_steps=5000, visualize=False, verbose=3)

이 줄에서 오류가 발생했습니다.

dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=10, target_model_update=0.001, policy=policy)

keras-rl == 0.4.2 및 tensorflow == 2.1.0을 사용하고 있습니다. 다른 답변을 바탕으로 tensorflow == 2.0.0-beta0도 시도했지만 오류를 해결하지 못했습니다.

누군가 내가이 오류에 직면하는 이유를 설명해 주시겠습니까? 그리고 그것을 해결하는 방법?

감사합니다.


2
무엇입니까 env? 어디에서 len일어나고 있습니까? 아니면 콜백의 일부입니까?
Celius Stingher

envRL 모델 훈련을위한 체육관 게임 환경입니다. lenTensorFlow 라이브러리의 어딘가에서 발생합니다. 자세한 내용은 질문을 업데이트했습니다.
vivekpadia70

답변:


3

이것이 실패하는 이유는 tf.TensorTF 2.0.0 (및 TF 1.15)에 __len__과부하 가 발생하여 예외가 발생하기 때문 입니다. 그러나 예를 들어 TF 1.14에는 __len__속성 이 없습니다 .

따라서 TF 1.15+ (포함)가 깨지면 keras-rl(특히 here ) 위의 오류가 발생합니다. 두 가지 옵션이 있습니다.

  • TF 1.14로 다운 그레이드 (권장)
  • __len__TensorFlow 소스 에서 과부하를 삭제하십시오 ( 다른 것들을 망칠 수 있으므로 권장하지 않습니다 )

답변 해주셔서 감사합니다. TF 1.14에서 완벽하게 작동합니다.
vivekpadia70
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.