Continuando el anterior post dónde introducí tensor flow hoy vengo con los optimizadores de funciones. Tensor flow ofrece optimizadores que cambian las variables para minimizar la funcion de perdida (loss function). El más simple es el de gradiente descendiente. Computan las derivadas simbólicas (symbolic derivatives) simplemente usando el modelo y la función tf.gradients. Por ejemplo:

[code language=”python”] optimizer = tf.train.GradientDescentOptimizer(0.01) train = optimizer.minimize(loss) sess.run(init) # reset values to incorrect defaults. for i in range(1000): sess.run(train, {x:[1,2,3,4], y:[0,-1,-2,-3]}) print(sess.run([W, b])) los resultados finales [array([-0.9999969], dtype=float32), array([ 0.99999082], dtype=float32)] [/code]

El modelo completo para la regresión linal es:

[code language=”python”] import numpy as np import tensorflow as tf # Model parameters W = tf.Variable([.3], tf.float32) b = tf.Variable([-.3], tf.float32) # Model input and output x = tf.placeholder(tf.float32) linear_model = W * x + b y = tf.placeholder(tf.float32) # loss loss = tf.reduce_sum(tf.square(linear_model - y)) # suma de los cuadrados # optimizer optimizer = tf.train.GradientDescentOptimizer(0.01) train = optimizer.minimize(loss) # training data x_train = [1,2,3,4] y_train = [0,-1,-2,-3] # training loop init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) # reset values to wrong for i in range(1000): sess.run(train, {x:x_train, y:y_train}) # evaluate training accuracy curr_W, curr_b, curr_loss  = sess.run([W, b, loss], {x:x_train, y:y_train}) print(“W: %s b: %s loss: %s”%(curr_W, curr_b, curr_loss)) # When run, it produces #W: [-0.9999969] b: [ 0.99999082] loss: 5.69997e-11 [/code] tf.contrib.learn te simplifica la vida con las funciones: ejecución, entrenamiento, iteraciones, evaluaciones entre otros

[code language=”python”] import tensorflow as tf import numpy as np features = [tf.contrib.layers.real_valued_column(“x”, dimension=1)] estimator = tf.contrib.learn.LinearRegressor(feature_columns=features) x = np.array([1., 2., 3., 4.]) y = np.array([0., -1., -2., -3.]) input_fn = tf.contrib.learn.io.numpy_input_fn({“x”:x}, y, batch_size=4, num_epochs=1000) estimator.fit(input_fn=input_fn, steps=1000) print(estimator.evaluate(input_fn=input_fn)) # Result: {‘global_step’: 1000, ‘loss’: 1.9650059e-11} [/code]