Keras中调用TensorBoard报错:TypeError: 'module' object is not callable
解决TypeError: 'module' object is not callable的问题
首先,这个错误最直接的原因是你调用time()时的导入方式不对。看你的代码里写了log_dir="/logs/{}".format(time()),如果你的导入语句是import time,那么time是一个模块对象,不能直接当作函数调用。解决这个问题有两种方式:
- 方式一:修改导入语句,直接导入
time函数:from time import time - 方式二:使用模块的
time()方法:log_dir="/logs/{}".format(time.time())
另外,我注意到你的代码里还有几个潜在的问题,也顺便提一下帮你避坑:
Critic网络的输入与训练数据不匹配
你的Critic网络定义的输入只有state_input,但训练时critic.fit传入的输入是[obs, advantage, old_prediction],这三个输入和网络的输入形状完全不匹配,后续肯定会报错。Critic的作用是评估状态的价值,所以训练时应该只传入状态obs,标签是对应的目标价值(比如折扣回报),而不是action。TensorBoard回调的变量名错误
你创建的TensorBoard对象叫tensorboard,但fit里传入的是callbacks=[tensorboard_actor],这个变量名不匹配,会导致找不到回调对象,需要改成tensorboard。
修正后的部分代码示例:
# 修正time的调用(假设用import time的情况) from keras.callbacks import TensorBoard import time tensorboard = TensorBoard(log_dir="/logs/{}".format(time.time()), histogram_freq=1, batch_size=32, write_graph=True, write_grads=True, write_images=True, embeddings_freq=0, embeddings_layer_names=None, embeddings_metadata=None, embeddings_data=None, update_freq='epoch') # 修正Critic的fit调用(假设目标价值是target_values) critic_loss = self.critic.fit([obs], [target_values], batch_size=self.batch_size, shuffle=True, epochs=self.epochs, verbose=False, callbacks=[tensorboard])
内容的提问来源于stack exchange,提问作者Mitra
相关产品推荐
相关产品推荐

