Keras模型使用training_v1.py而不是www.example.com编译training.py

au9on6nz  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(102)

这是再现问题的最小示例:

from keras.models import Sequential
from keras.layers import Dense, Flatten, LeakyReLU
from keras.regularizers import l1
from rl.agents.dqn import DQNAgent

reg = l1(1e-5)
relu_alpha = 0.01

model = Sequential()

model.add(Flatten(input_shape=[128,10,20]))
model.add(Dense(16, kernel_regularizer = reg))
model.add(LeakyReLU(alpha = relu_alpha))
model.add(Dense(3, activation = "linear", kernel_regularizer = reg))

model.compile(loss='mse', jit_compile=True)

结果是以下错误:

File "C:\Users\lbosc\anaconda3\envs\ml_env3\lib\site-packages\keras\engine\training_v1.py", line 306, in compile
    raise TypeError(
TypeError: Invalid keyword argument(s) in `compile`: {'jit_compile'}

我能够理解问题出在import DQNAgent行,它用自己的方法重新定义了Sequentialcompile方法。事实上,如果删除import,编译就可以正确完成。keras.models.Sequential的compile方法定义在库的文件training.py中,接受参数jit_compile,而rl.agents.dqn.DQNAgent在最后使用的compile方法调用training_v1.py文件中定义的keras的compile方法,有点不同,不接受参数jit_compile
因此,由于在代码的后续部分中,我需要DQNAgent,最后的问题是:如何强制keras-rl 2使用training.py而不是training_v1.py?或者,在另一种选择中,我如何告诉我的代码使用哪个是compile方法?

chy5wohz

chy5wohz1#

我发布了我最终找到的解决方案,即使我并不完全理解它的工作原理。rl.agents中的__init__文件导入rl.agents.ddpg;在这里,您应该替换以下调用:

import tensorflow as tf
tf.compat.v1.disable_eager_execution()

其中:

from tensorflow.python.framework.ops import disable_eager_execution
disable_eager_execution()

这就是你keras-r1开始使用tensorflow的v2函数而不是v1兼容函数,并且与v2兼容的我的代码的其余部分不再发现冲突。

相关问题