TypeError: प्रतीकात्मक सेंसर के लिए लेन अच्छी तरह से परिभाषित नहीं है। (सक्रियण_3 / पहचान: 0) कृपया आकार की जानकारी के लिए `len (x)` के बजाय `x.shape` को कॉल करें।


10

मैं ओपनएआई जिम के एक गेम पर डीक्यूएल मॉडल लागू करने की कोशिश कर रहा हूं। लेकिन यह मुझे निम्नलिखित त्रुटि दे रहा है।

TypeError: len को प्रतीकात्मक Tensors के लिए अच्छी तरह से परिभाषित नहीं किया गया है। (सक्रियण_3 / पहचान: 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())

उस मॉडल को DeralN मॉडल को केरल-आरएल से निम्नानुसार फिट करना:

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)

मैं केर-आरएल == 0.4.2 और टेंसोफ़्लो == 2.1.0 का उपयोग कर रहा हूं। अन्य उत्तरों के आधार पर, मैंने भी टेंसरफ़्लो == 2.0.0-बीटा 0 की कोशिश की, लेकिन यह त्रुटि को हल नहीं करता है।

क्या कोई मुझे समझा सकता है कि मैं इस त्रुटि का सामना क्यों कर रहा हूं? और इसे कैसे हल करें?

धन्यवाद।


2
क्या है env? कहां lenजगह ले रहा है? या यह कॉलबैक का हिस्सा है?
सेलियस स्टिंगहर

envआरएल मॉडल के प्रशिक्षण के लिए जिम गेम का माहौल है। lenTensorFlow पुस्तकालय में कहीं जगह ले रहा है। मैंने अधिक विवरण के लिए प्रश्न को अपडेट कर दिया है।
विवेकपदिया

जवाबों:


3

इसका कारण यह है क्योंकि, tf.TensorTF 2.0.0 (और TF 1.15) __len__ओवरलोड है और एक अपवाद को जन्म देता है । लेकिन TF 1.14 उदाहरण के लिए __len__विशेषता नहीं है ।

इसलिए, टीएफ 1.15+ (समावेशी) कुछ भी टूट जाता है keras-rl(विशेष रूप से यहां ), जो आपको उपरोक्त त्रुटि देता है। तो आपको दो विकल्प मिले,

  • टीएफ 1.14 के लिए डाउनग्रेड (अनुशंसित)
  • __len__TensorFlow स्रोत में ओवरलोडिंग को हटाएं ( अनुशंसित नहीं है क्योंकि यह अन्य चीजों को तोड़ सकता है)

जवाब के लिए धन्यवाद। यह TF 1.14 पर पूरी तरह से काम कर रहा है।
विवेकपदिया 17०
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.