[PYTHON] Estimation la plus probable de la moyenne et de la variance avec TensorFlow

Il y a un malentendu sur le fait que Tensorflow est une bibliothèque d'apprentissage automatique, j'ai donc essayé de trouver la moyenne et la variance pour approfondir ma compréhension.

--Générer 100 nombres aléatoires normaux avec une moyenne de 50 et un écart type de 10.

Si seulement la moyenne, j'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow. .

Gradient decent

python


import matplotlib.pylab as plt
%matplotlib inline
import numpy as np
import tensorflow as tf

x_train = np.random.randn(100) * 10 + 50

n_itr = 10000

m = tf.Variable([30.0], tf.float32)
s = tf.Variable([3.0], tf.float32)
x = tf.placeholder(tf.float32)
N = tf.count_nonzero(x, dtype=tf.float32)

loss = N / 2 * tf.log(2 * np.pi * s**2) + 1.0 / (2 * s**2) * tf.reduce_sum(tf.square(x - m))

for lr in [0.1, 0.01, 0.001]:

    optimizer = tf.train.GradientDescentOptimizer(lr)
    train = optimizer.minimize(loss)

    init = tf.global_variables_initializer()
    sess = tf.Session()
    sess.run(init)

    est_m = []
    est_s = []
    for i in range(n_itr):
        sess.run(train, {x:x_train})
        est_m.append(sess.run([m]))
        est_s.append(sess.run([s]))
        
    est_m = np.array(est_m)
    est_s = np.array(est_s)
    plt.plot(est_s.reshape(n_itr)[::100], est_m.reshape(n_itr)[::100], marker=".", label="lr={}".format(lr))

plt.title("batch gradient decent")
plt.xlabel("std")
plt.ylabel("mean")
plt.legend()
plt.show();

Unknown-5.png

RMS Prop

python


n_itr = 1000

for lr in [1, 0.5, 0.1]:

    optimizer = tf.train.RMSPropOptimizer(lr)
    train = optimizer.minimize(loss)

    init = tf.global_variables_initializer()
    sess = tf.Session()
    sess.run(init)

    est_m = []
    est_s = []
    for i in range(n_itr):
        sess.run(train, {x:x_train})
        est_m.append(sess.run([m]))
        est_s.append(sess.run([s]))
        
    est_m = np.array(est_m)
    est_s = np.array(est_s)
    plt.plot(est_s.reshape(n_itr)[::10], est_m.reshape(n_itr)[::10], marker=".", label="lr={}".format(lr))

plt.title("batch RMS Prop")
plt.xlabel("std")
plt.ylabel("mean")
plt.legend()
plt.show();

Unknown-4.png

Adam

python


n_itr = 1000

for lr in [5, 1, 0.1, 0.01]:

    optimizer = tf.train.AdamOptimizer(lr)
    train = optimizer.minimize(loss)

    init = tf.global_variables_initializer()
    sess = tf.Session()
    sess.run(init)

    est_m = []
    est_s = []
    for i in range(n_itr):
        sess.run(train, {x:x_train})
        est_m.append(sess.run([m]))
        est_s.append(sess.run([s]))
        
    est_m = np.array(est_m)
    est_s = np.array(est_s)
    plt.plot(est_s.reshape(n_itr)[::10], est_m.reshape(n_itr)[::10], marker=".", label="lr={}".format(lr))

plt.title("batch Adam")
plt.xlabel("std")
plt.ylabel("mean")
plt.legend()
plt.show();

Unknown-3.png

AdaGrad

python


n_itr = 1000

for lr in [20, 10, 5, 1]:

    optimizer = tf.train.AdagradOptimizer(lr)
    train = optimizer.minimize(loss)

    init = tf.global_variables_initializer()
    sess = tf.Session()
    sess.run(init)

    est_m = []
    est_s = []
    for i in range(n_itr):
        sess.run(train, {x:x_train})
        est_m.append(sess.run([m]))
        est_s.append(sess.run([s]))
        
    est_m = np.array(est_m)
    est_s = np.array(est_s)
    plt.plot(est_s.reshape(n_itr)[::10], est_m.reshape(n_itr)[::10], marker=".", label="lr={}".format(lr))

plt.title("batch AdaGrad")
plt.xlabel("std")
plt.ylabel("mean")
plt.legend()
plt.show();

Unknown-2.png

AdaDelta

python


n_itr = 1000

for lr in [5000, 1000, 100]:

    optimizer = tf.train.AdadeltaOptimizer(lr)
    train = optimizer.minimize(loss)

    init = tf.global_variables_initializer()
    sess = tf.Session()
    sess.run(init)

    est_m = []
    est_s = []
    for i in range(n_itr):
        sess.run(train, {x:x_train})
        est_m.append(sess.run([m]))
        est_s.append(sess.run([s]))
        
    est_m = np.array(est_m)
    est_s = np.array(est_s)
    plt.plot(est_s.reshape(n_itr)[::10], est_m.reshape(n_itr)[::10], marker=".", label="lr={}".format(lr))

plt.title("batch AdaDelta")
plt.xlabel("std")
plt.ylabel("mean")
plt.legend()
plt.show();

Unknown-1.png

Recommended Posts

Estimation la plus probable de la moyenne et de la variance avec TensorFlow
Avantages et inconvénients de la méthode d'estimation la plus probable
Estimation la plus probable de diverses distributions avec Pyro
Exemple de code python pour la distribution exponentielle et l'estimation la plus probable (MLE)
Essayons à nouveau Estimation de la plupart des probabilités et ajustement du modèle (distribution de probabilité) ① Distribution de probabilité discrète
Essayons à nouveau La plupart des estimations de probabilité et ajustement du modèle (distribution de probabilité) ② Distribution de probabilité continue
Implémentation d'estimation la plus probable du modèle de sujet en python
Méthode du carré minimum et méthode d'estimation la plus probable (comparaison par ajustement du modèle)
Coexistence de Python2 et 3 avec CircleCI (1.0)
Comparez le TensorFlow brut avec tf.contrib.learn et Keras
pix2pix tensorflow2 Enregistrement d'essais et d'erreurs
L'histoire du calcul numérique des équations différentielles avec TensorFlow 2.0
Calcul en temps réel de la valeur moyenne avec corroutine
2. Écart moyen et standard avec le réseau neuronal!
Visualisation des cartes et des filtres des fonctionnalités CNN (Tensorflow 2.0)
Mélangez des centaines de milliers d'images uniformément avec tensorflow.
Coexistence de Fcitx et Zoom ~ Avec localisation japonaise ~
Collection de recettes comparant les versions 1 et 2 de TensorFlow (partie 1)
Script pour tweeter avec des multiples de 3 et des nombres avec 3 !!
Concept de raisonnement bayésien (2) ... Estimation bayésienne et distribution de probabilité
Implémentation de l'arbre TRIE avec Python et LOUDS
Conversion en ondelettes d'images avec PyWavelets et OpenCV
Prise en compte du score de propension et de la précision de l'estimation des effets
Optimisation de portefeuille avec Python (modèle de distribution moyenne de Markovitz)
Poursuite du développement multi-plateforme avec Electron et Python
Calcul séquentiel de la valeur moyenne avec l'algorithme en ligne
Exemple de lecture et d'écriture de CSV avec Python