TensorFlow1.2.1报module 'tensorflow' has no attribute 'reduce_std'错如何解决
问题原因
tf.reduce_std 是 TensorFlow 1.4 版本才正式加入的公共API,你使用的 TensorFlow 1.2.1 版本没有内置这个接口,因此会触发属性不存在的报错。
解决方法
你可以基于 TensorFlow 1.2.1 已有的基础API手动实现标准差计算逻辑,替换原有的tf.reduce_std调用即可。标准差的计算公式为:标准差 = 平方根(张量平方的均值 - 张量均值的平方),你可以直接使用tf.nn.moments接口直接获取张量的均值和方差,再对方差开平方得到标准差,比手动逐层计算更简洁。
替换后的完整代码示例
class Dense(Layer): def __init__(self, input_units, output_units, learning_rate=0.1): graph = tf.Graph() with graph.as_default(): initializer = tf.contrib.layers.xavier_initializer() self.weights = tf.Variable(initializer([input_units, output_units])) # 手动实现等效reduce_std的逻辑,适配TF 1.2.1版本 _, var = tf.nn.moments(self.weights, axes=None, keep_dims=False) std_val = tf.sqrt(var) print(std_val) self.biases= tf.Variable(initializer([output_units,]))
注意事项
- 如果需要指定维度计算标准差,修改
tf.nn.moments的axes参数即可,和原tf.reduce_std的axis参数用法完全一致 - 如果需要保留计算后的维度,将
keep_dims参数设为True即可,和原接口的keepdims参数功能对应
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

