2016-09-06 10 views

答えて

22

平均と分散を得るにはtf.nn.momentsを使用してください。

mean, var = tf.nn.moments(x, axes=[1]) 

より上のtf.nn.momentsのparamsはdocs

+0

どのように私はCでこれを達成することができ++ APIを? –

+0

私は、C++ APIの平均に関するドキュメントのみを表示しています:https://www.tensorflow.org/api_docs/cc/class/tensorflow/ops/mean自分で分散を計算しなければならないと思います。 sum [(x-u)^ 2]分散をより効率的に計算する方法を知るために、Pythonソースコードを掘り下げてバックエンドを呼び出す方法があります。 – Steven

3

を参照してくださいまた、Kerasから適応し、次のコードでreduce_stdを使用することができます。

#coding=utf-8 
import numpy as np 
import tensorflow as tf 

def reduce_var(x, axis=None, keepdims=False): 
    """Variance of a tensor, alongside the specified axis. 

    # Arguments 
     x: A tensor or variable. 
     axis: An integer, the axis to compute the variance. 
     keepdims: A boolean, whether to keep the dimensions or not. 
      If `keepdims` is `False`, the rank of the tensor is reduced 
      by 1. If `keepdims` is `True`, 
      the reduced dimension is retained with length 1. 

    # Returns 
     A tensor with the variance of elements of `x`. 
    """ 
    m = tf.reduce_mean(x, axis=axis, keep_dims=True) 
    devs_squared = tf.square(x - m) 
    return tf.reduce_mean(devs_squared, axis=axis, keep_dims=keepdims) 

def reduce_std(x, axis=None, keepdims=False): 
    """Standard deviation of a tensor, alongside the specified axis. 

    # Arguments 
     x: A tensor or variable. 
     axis: An integer, the axis to compute the standard deviation. 
     keepdims: A boolean, whether to keep the dimensions or not. 
      If `keepdims` is `False`, the rank of the tensor is reduced 
      by 1. If `keepdims` is `True`, 
      the reduced dimension is retained with length 1. 

    # Returns 
     A tensor with the standard deviation of elements of `x`. 
    """ 
    return tf.sqrt(reduce_var(x, axis=axis, keepdims=keepdims)) 

if __name__ == '__main__': 
    x_np = np.arange(10).reshape(2, 5).astype(np.float32) 
    x_tf = tf.constant(x_np) 
    with tf.Session() as sess: 
     print(sess.run(reduce_std(x_tf, keepdims=True))) 
     print(sess.run(reduce_std(x_tf, axis=0, keepdims=True))) 
     print(sess.run(reduce_std(x_tf, axis=1, keepdims=True))) 
    print(np.std(x_np, keepdims=True)) 
    print(np.std(x_np, axis=0, keepdims=True)) 
    print(np.std(x_np, axis=1, keepdims=True)) 
+0

私はtf1.4を使用していますが、tf.nn.momentsは何らかの理由で正しい結果を得ていません...私はあなたのバージョンを試しました。 –

関連する問題