Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何修复&x27;给定对象不是优化器实例';当使用Tensorflow-2.0 tf.优化器时?_Python_Tensorflow_Tensorflow Estimator - Fatal编程技术网

Python 如何修复&x27;给定对象不是优化器实例';当使用Tensorflow-2.0 tf.优化器时?

Python 如何修复&x27;给定对象不是优化器实例';当使用Tensorflow-2.0 tf.优化器时?,python,tensorflow,tensorflow-estimator,Python,Tensorflow,Tensorflow Estimator,我正在使用Tensorflow 2.0和标准DNNClassifier估计器。似乎tf.Optimizer中的优化器不是分类器所期望的优化器的实例 我已经在tf.keras.optimizers上使用了tf.optimizers和新的keras实现,得到了相同的错误。 即使将估计器调用用作lambda函数,仍然会返回相同的消息 lr=tf.optimizers.schedules.ExponentialDecay( 初始学习率=0.1, 衰减步数=10000, 衰减(衰减率=0.96) 优化器

我正在使用Tensorflow 2.0和标准DNNClassifier估计器。似乎tf.Optimizer中的优化器不是分类器所期望的优化器的实例

我已经在tf.keras.optimizers上使用了tf.optimizers和新的keras实现,得到了相同的错误。 即使将估计器调用用作lambda函数,仍然会返回相同的消息


lr=tf.optimizers.schedules.ExponentialDecay(
初始学习率=0.1,
衰减步数=10000,
衰减(衰减率=0.96)
优化器=tf.optimizers.Adam(学习率=lr)
分类器=tf.estimator.DNNClassifier([20,45,15],
专题栏目,
n_classes=df.target.nunique(),
优化器=优化器)
train(输入\u fn=lambda:df\u到\u数据集(
列车,批量大小=批量大小),步数=10000)
每次执行时,我都会收到相同的消息,无论我选择哪个优化器:


给定对象不是优化器实例。给定:

原因是您正在为模型和层使用tensorflow.python.keras api,为SGD使用keras.optimizers。它们是tensorflow和纯keras的两个不同keras版本。他们不能一起工作。您必须将所有内容更改为一个版本

在此之后,我的代码运行良好:p


希望这能有所帮助。

好的,无论是谁发现了这个:

这个问题阻碍了Tensorflow 2.0的未来版本。 我今天在github存储库中发现了类似的问题:

到今天为止,除了使用定制的估计器外,没有其他解决方法。(我不确定这是否有效)

编辑:多亏了@Vlad,我找到了一个解决办法。他建议使用compat来构建估计器,我也这么做了。 下面是代码的最终外观:

optimizer = tf.compat.v1.train.AdamOptimizer(
    learning_rate=tf.compat.v1.train.exponential_decay(
        global_step=0,
        learning_rate=0.1,
        decay_steps=10000,
        decay_rate=0.96, staircase=True))

使用
tf.compat.v1.train.AdamOptimizer()
而不是
tf.optimizer.Adam()

我已经尝试使用tensorflow实现的优化器和tf.keras优化器,它们目前还不适用于估算器。使用
tf.compat.v1.train.AdamOptimizer()
而不是
tf.optimizer.Adam()
谢谢你的建议@Vlad,但这在一定程度上是可行的。稍后,内置函数
/opt/anaconda3/lib/python3.6/site-packages/tensorflow/python/training/optimizer.py在可调用时调用(self,param)1220 def调用(self,param):1221“可调用时调用函数。”->1222可调用时返回参数(param)else param TypeError:\uuuu call\uuuuu()缺少1个必需的位置参数:“步骤”
问题似乎出在代码的某个地方。我需要看到完整的回溯来帮助你们。@Vlad,你们可以提交你们的答案让我接受。我最终用compat v1和model whith v2构建了我的优化器。这样我们就可以解决这个问题。根据我下面的回答,这是下一版本的已知问题。很好,很高兴听到!