目录
一、问题
import tensorflow as tf
import tensorflow_probability as tfp
x = tf.Variable(0.)
loss_fn = lambda: (x - 5.)**2
##convergence_criteria
losses = tfp.math.minimize(
loss_fn, num_steps=1000, optimizer=tf.optimizers.Adam(learning_rate=0.1),
convergence_criterion=(
tfp.optimizers.convergence_criteria.LossNotDecreasing(atol=0.01)))
这个代码是官网(tfp.math.minimize)提供的示例,并且显示Last updated 2023-10-03 UTC.
结果出现如下错误:
二、解决办法
将tfp.optimizers.convergence_criteria.LossNotDecreasing修改为tfp.python.optimizer.convergence_criteria.LossNotDecreasing
注意:这里使用加粗来直观表示二者的区别,让读者可以快速看到二者的区别。
实际上,删掉中间的python也是可以的,原来运行不出来的代码optimizers中多了一个字母s,删掉这个字母s即可。
x = tf.Variable(0.)
loss_fn = lambda: (x - 5.)**2
losses = tfp.math.minimize(
loss_fn, num_steps=1000, optimizer=tf.optimizers.Adam(learning_rate=0.1),
convergence_criterion=(
tfp.python.optimizer.convergence_criteria.LossNotDecreasing(atol=0.01)))
print("optimized value is {} with loss {}".format(x, losses[-1]))
三、解决过程
在Github(https://github.com/tensorflow/probability/releases/tag/v0.22.0)上找到最新版本Tensorflow-probability的源代码。
下载后,可以看到
四、怎么想到的?
在必应上找了许多类似的问题,虽然都是基于tensorflow的(我们的报错信息是基于tensorflow-probability)。例如:
(1)解决AttributeError: module ‘tensorflow‘ has no attribute ‘histogram_summary‘-CSDN博客
(2) 关于tensorflow 中module ‘tensorflow‘ has no attribute ‘xxx‘问题的根本解决方法
(3)ModuleNotFoundError: No module named ‘keras.optimizers.optimizer_experimental‘
这个帖子,告诉我optimizers是个文件夹,之前一直以为是module,从尝试安装这个module来着。但是报错:No module named 'optimizers'。于是在必应中搜索这个错误,就搜索到上面的这个博客。
当然还有还看了其他的一些博客和stackoverflow,相关性不大,没在这里展示了。
五、关于Python运行环境的一些尝试
最开始遇到这个问题的时候,我以为是python运行环境的问题,于是尝试改变python运行环境:
- 在RStudio中运行python代码(通过miniconda安装python)【攻略:在R中搭配 Python环境-饮食有度的元气少女的博客】
- 下载Python解释器,创建Python虚拟环境。【攻略:安装python虚拟环境-CSDN博客】
- 在coLab上运行python代码(该平台已经提前安装好了tensorflow和tensorflow-probability无需安装)(https://colab.sandbox.google.com/)
在这三个平台上运行了,官网提供的示例代码,结果仍是报错。
真的差点要通过Python+PyCharm的安装步骤,来安装Python-IDE环境。(只不过下载Python3.9.13,可能服务器的网络不好,下载速度挺慢的,大概30mins。到这个问题解决了,Python3.9.13还没有下载好。于是没有尝试安装Python+PyCharm)。