【tensorflow】中 tf.reduce_mean函数:求均值

参考文章:
版权声明:本文其中一部分参考了CSDN博主「-牧野-」的原创文章,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dcrmg/article/details/79797826

tf.reduce_mean 函数用于计算张量tensor沿着指定的数轴(tensor的某一维度)上的的平均值,主要用作降维或者计算tensor(图像)的平均值。

tf.reduce_mean 函数

reduce_mean(
    input_tensor,
    axis=None,#axis是“轴”的意思,坐标轴
    keep_dims=False,
    name=None,
    reduction_indices=None
)

参数

  • 参数input_tensor: 输入的待降维的tensor;
  • 参数axis: 指定的轴,如果不指定,则计算所有元素的均值;
  • 参数keep_dims:是否降维度,设置为True,输出的结果保持输入tensor的形状,设置为False,输出结果会降低维度;
  • 参数name: 操作的名称;
  • 参数 reduction_indices:在以前版本中用来指定轴,已弃用;

以一个维度是2,形状是[2,4]的tensor举例:

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
x = [[30,80,20,30],
      [50,20,30,40]]
 
xx = tf.cast(x,tf.float32)
 
mean_all = tf.reduce_mean(xx, keep_dims=False)
mean_0 = tf.reduce_mean(xx, axis=0, keep_dims=False)
mean_1 = tf.reduce_mean(xx, axis=1, keep_dims=False)
mean_2 = tf.reduce_mean(xx, axis=1, keep_dims=True)#改了keep_dims
 
with tf.Session() as sess:
    m_a,m_0,m_1,m_2 = sess.run([mean_all, mean_0, mean_1,mean_2])
 
print (m_a)    # output: 37.5
print (m_0)    # output: [40. 50. 25. 35.]
print (m_1)   #output:  [40. 35.]
print ("如果设置保持原来的张量的维度,keep_dims=True ,结果:")
print (m_2) 
#output: [[40.]
#         [35.]]

运行结果,加上个人理解:

37.5
[40. 50. 25. 35.]
[40. 35.]
如果设置保持原来的张量的维度,keep_dims=True ,结果:
[[40.]
 [35.]]
x = [[30,80,20,30],
      [50,20,30,40]]
  1. 37.5 是把多维数组x,按一维的形式展开,求所有元素的和,再求平均值。
  2. [40. 50. 25. 35.] axis=0,按第一维(行)上的元素,每一列都这样做求平均值。
  3. [[40.]
    [35.]]
    axis=1,按第二维(列)上的元素,每一行都这样做求平均值。
    当设置选择keep_dims=True ,保持原来的张量的维度时,可以明显的看到结果是个“2*1的列向量”。

类似函数还有:

  • tf.reduce_sum :计算tensor指定轴方向上的所有元素的累加和;
  • tf.reduce_max : 计算tensor指定轴方向上的各个元素的最大值;
  • tf.reduce_all : 计算tensor指定轴方向上的各个元素的逻辑和(and运算);
  • tf.reduce_any: 计算tensor指定轴方向上的各个元素的逻辑或(or运算);
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这段代码定义了一个Actor类,它是一个神经网络模型,用于预测在给定的状态下应该采取什么样的动作。具体地,这个Actor类包含以下几个成员变量和函数: - 成员变量state_dim:表示状态(state)的维度; - 成员变量action_dim:表示动作(action)的维度; - 成员变量max_action:表示动作的最大值; - 函数__init__:初始化Actor类,它定义了神经网络的结构,包括三个全连接层(layer1、layer2、mean)和一个用于输出动作的全连接层(log_std)。这些层分别包含256个神经元,其前两个层采用ReLU激活函数,最后一个输出动作的层采用双曲正切函数(tanh)作为激活函数; - 函数call:接收一个状态作为输入,返回一个动作和与该动作相关的概率值。该函数首先将输入状态通过前两个全连接层进行处理,然后使用mean层输出动作的均值,再使用log_std层输出动作的标准差的对数。这里采用双曲正切函数作为激活函数是因为它的输出范围是[-1,1],这样乘以self.max_action就可以得到[-self.max_action, self.max_action]之间的动作值。然后通过标准差和均值构建一个正态分布,并从采样得到一个动作值。根据采样得到的动作值,计算该动作的概率,并使用一个公式对概率进行调整,最后将动作值通过tanh函数映射到[-1,1]之间。函数最终返回该动作值和对应的概率值的自然对数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值