TypeError:lenはシンボリックテンソルに対して適切に定義されていません。(activation_3 / Identity:0)形状情報については、 `len(x)`ではなく `x.shape`を呼び出してください


10

私はopenAIジムの1つのゲームに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

envは、RLモデルをトレーニングするためのジムゲーム環境です。lenTensorFlowライブラリのどこかで行われています。詳細については質問を更新しました。
vivekpadia70

回答:


3

これがtf.Tensor失敗する理由は、TF 2.0.0(およびTF 1.15)が__len__過負荷になり、例外が発生するためです。ただし、たとえばTF 1.14には__len__属性がありません。

したがって、TF 1.15+(包括的)はすべて(keras-rl特にここでは)壊れ、上記のエラーが発生します。つまり、2つのオプションがあります。

  • TF 1.14へのダウングレード(推奨)
  • __len__TensorFlowソースのオーバーロードを削除します(これは他のものを壊す可能性があるためお勧めません

答えてくれてありがとう。TF 1.14で完全に動作しています。
vivekpadia70
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.