【bug解决】AttributeError: module ‘tensorflow‘ has no attribute ‘truncated_normal‘

目录

一、问题描述

二、问题分析

三、进一步分析函数

总结


一、问题描述

想要在tensorflow中产生正态分布的随机数,网上找到的资料是这样的:

import tensorflow as tf

c = tf.truncated_normal(shape=[2, 3], mean=0, stddev=1)

with tf.Session() as sess:
    print(sess.run(c))

# c = tf.compat.v1.random.truncated_normal(shape=[2, 3], mean=0, stddev=1)
# print(c)

但是运行后会有如下报错:

D:\ANACON\envs\L2RPN\python.exe "E:/Undergraduate/Situation Awareness/LeNet-5_learning.py" 
Traceback (most recent call last):
  File "E:\Undergraduate\Situation Awareness\LeNet-5_learning.py", line 3, in <module>
    c = tf.truncated_normal(shape=[2, 3], mean=0, stddev=1)
AttributeError: module 'tensorflow' has no attribute 'truncated_normal'

进程已结束,退出代码1

即:


二、问题分析

这是Tensorflow版本不同造成的,我用的是2.0,最新版本改了函数名和使用方法。具体如下:

import tensorflow as tf

# c = tf.truncated_normal(shape=[2, 3], mean=0, stddev=1)
# with tf.Session() as sess:
#     print(sess.run(c))

c = tf.compat.v1.random.truncated_normal(shape=[2, 3], mean=0, stddev=1)
print(c)

运行结果:

tf.Tensor(
[[-0.18886028 -0.737174    1.5540563 ]
 [ 1.5035461   0.23027402 -0.67294544]], shape=(2, 3), dtype=float32)

问题解决


三、进一步分析函数

tf.truncated_normal(shape, mean, stddev)

这个函数产生正态分布,均值和标准差自己设定。这是一个截断的产生正态分布的函数,生成的值服从具有指定平均值和标准偏差的正态分布,换句话说,产生的值如果与均值的差值大于两倍的标准差则丢弃重新选择。和一般的正态分布的产生随机数据比起来,这个函数产生的随机数与均值的差距不会超过两倍的标准差,但是一般的别的函数是可能的。

在正态分布的曲线中:
横轴区间(μ-σ,μ+σ)内的面积为68.268949%
横轴区间(μ-2σ,μ+2σ)内的面积为95.449974%
横轴区间(μ-3σ,μ+3σ)内的面积为99.730020%

X落在(μ-3σ,μ+3σ)以外的概率小于千分之三,在实际问题中常认为相应的事件是不会发生的,基本上可以把区间(μ-3σ,μ+3σ)看作是随机变量X实际可能的取值区间,这称之为正态分布的“3σ”原则。
在tf.truncated_normal中如果x的取值在区间(μ-2σ,μ+2σ)之外则重新进行选择。这样保证了生成的值都在均值附近。

释义:截断的产生正态分布的随机数,即随机数与均值的差值若大于两倍的标准差,则重新生成。

  • shape,生成张量的维度
  • mean,均值
  • stddev,标准差


总结

tensorflow版本不同,函数名可能会有不同,用法也会略有差别,要注意辨别。 

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 这个错误通常是因为Tensorflow的版本问题导致的。在Tensorflow 2.0及以上的版本中,truncated_normal已经被移除了,取而代之的是TruncatedNormal函数。如果你正在使用Tensorflow 1.x版本,你可以尝试使用以下代码修复这个问题: ``` import tensorflow as tf tf.compat.v1.truncated_normal() ``` 如果你使用的是Tensorflow 2.0或更高版本,你可以使用以下代码解决这个问题: ``` import tensorflow as tf tf.random.truncated_normal() ``` ### 回答2: 您好,AttributeError: module 'tensorflow' has no attribute 'truncated_normal' 是由于 TensorFlow 模块中没有 truncated_normal 方法所引起的。 在 TensorFlow 2.x 版本中,truncated_normal 方法已被移除,取而代之的是 tf.random.truncated_normal 方法,用于生成截断的正态分布随机数。 例如,您可以使用以下代码来生成截断的正态分布随机数: import tensorflow as tf random_tensor = tf.random.truncated_normal(shape=[2, 3], mean=0.0, stddev=1.0) 其中,shape 参数指定了生成随机数的形状,mean 参数指定了正态分布的均值,stddev 参数指定了正态分布的标准差。 希望以上信息能够回答您的问题。如有任何疑问,请随时向我提问。 ### 回答3: 在TensorFlow中,`truncated_normal`函数是用于创建具有截断正态分布的张量的函数。在Python中,当我们尝试使用`truncated_normal`函数时,可能会遇到`AttributeError: module 'tensorflow' has no attribute 'truncated_normal'`的错误。 这个错误通常意味着我们正在使用一个不支持被调用的函数或方法。在TensorFlow的较新版本中,`truncated_normal`函数已被弃用并替换为`tf.random.truncated_normal`函数。 为了解决这个问题,我们需要使用新的函数名称`tf.random.truncated_normal`来创建具有截断正态分布的张量。我们可以使用以下代码示例来创建一个具有截断正态分布的张量: ```python import tensorflow as tf shape = [3, 3] mean = 0.0 stddev = 1.0 tensor = tf.random.truncated_normal(shape, mean, stddev) ``` 在这个例子中,我们导入了`tensorflow`库并将我们想要的张量形状、平均值和标准差作为参数传递给`tf.random.truncated_normal`函数。这将创建一个具有截断正态分布的张量。 总之,当使用TensorFlow时,如果遇到`AttributeError: module 'tensorflow' has no attribute 'truncated_normal'`错误,我们应该使用`tf.random.truncated_normal`函数来替代`truncated_normal`函数来创建具有截断正态分布的张量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rachel MuZy

你的鼓励是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值