TensorFlow2.0 中出现AttributeError: 'module' object has no attribute 'XXX' 统一解决方案

一:AttributeError: ‘module’ object has no attribute ‘truncated_normal’

tensorflow2.0中修改了这个函数名,因此会报错。

正态分布这个函数truncated_normal()在C:\ProgramData\Anaconda3\envs\tensorflow\Lib\site-packages\tensorflow_core\python\ops\random_ops.py

打开这个文件后查看源代码,看到下面代码:函数废弃了!!!

@tf_export("random.truncated_normal",
           v1=["random.truncated_normal", "truncated_normal"])
@deprecation.deprecated_endpoints("truncated_normal")
def truncated_normal(shape,
                     mean=0.0,
                     stddev=1.0,
                     dtype=dtypes.float32,
                     seed=None,
                     name=None):

在TensorFlow2.0官方文档中找到解决方案,地址如下:点击查看官方文档
https://www.tensorflow.org/api_docs/python/tf/random/truncated_normal

解决方案

将tf.truncated_normal([image_size * image_size, num_labels]))修改为:

tf.compat.v1.random.truncated_normal([image_size * image_size, num_labels]))

不再报错!!!

二:module ‘tensorflow_core._api.v2.train’ has no attribute ‘gradientdescentoptimizer’

在TensorFlow2.0,Keras 嵌入到TensorFlow中,变成默认的API,函数调用也发生了变化~!

In TensorFlow 2.0, Keras became the default high-level API, and optimizer functions migrated from tf.keras.optimizers into separate API called tf.optimizers. They inherit from Keras class Optimizer. Relevant functions from tf.train aren’t included into TF 2.0. So to access GradientDescentOptimizer, call tf.optimizers.SGD。。

在TensorFlow2.0官方文档中找到解决方案,地址如下:点击查看官方文档
https://www.tensorflow.org/api_docs/python/tf/compat/v1/train/GradientDescentOptimizer

解决方案:

将optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(loss)修改为:

optimizer = tf.compat.v1.train.GradientDescentOptimizer(0.5).minimize(loss)

不再报错!!!

三:总结

由于tensorflow2.0对很多函数做了修改,导致函数的所处的模块发生了改变,当遇到上述AttributeError时,记得打开官方文档,然后全局搜一下报错的函数。比如GradientDescentOptimizer函数,马上就能知道怎么使用这个函数了!!!

官网文档的地址如下: https://www.tensorflow.org/api_docs/python
TensorFlow2.0 中出现AttributeError: 'module' object has no attribute 'XXX' 统一解决方案_第1张图片

你可能感兴趣的:(TensorFlow)