tensorflow
Estructura de regresión lineal simple en TensorFlow con Python
Buscar..
Introducción
Un modelo ampliamente utilizado en las estadísticas tradicionales es el modelo de regresión lineal. En este artículo, el objetivo es seguir la implementación paso a paso de este tipo de modelos. Vamos a representar una estructura de regresión lineal simple.
Para nuestro estudio, analizaremos la edad de los niños en el eje x y la altura de los niños en el eje y . Intentaremos predecir la altura de los niños, utilizando su edad, aplicando una regresión lineal simple [en TF, encontrando la mejor W y b]
Parámetros
Parámetro | Descripción |
---|---|
tren_X | np array con x dimensión de la información |
tren_Y | np array con y dimensión de información |
Observaciones
Utilicé la sintaxis TensorBoard para rastrear el comportamiento de algunas partes del modelo, el costo, el tren y los elementos de activación.
with tf.name_scope("") as scope:
Importaciones utilizadas:
import numpy as np
import tensorflow as tf
Tipo de solicitud e idioma utilizado:
He utilizado un tipo de aplicación de implementación de consola tradicional, desarrollada en Python, para representar el ejemplo.
Versión de TensorFlow utilizada:
1.0.1
Ejemplo / referencia académica conceptual extraída de aquí :
Función de regresión simple estructura de código
Definición de la función:
def run_training(train_X, train_Y):
Variables de entrada:
X = tf.placeholder(tf.float32, [m, n])
Y = tf.placeholder(tf.float32, [m, 1])
Representación de peso y sesgo.
W = tf.Variable(tf.zeros([n, 1], dtype=np.float32), name="weight")
b = tf.Variable(tf.zeros([1], dtype=np.float32), name="bias")
Modelo Lineal:
with tf.name_scope("linear_Wx_b") as scope:
activation = tf.add(tf.matmul(X, W), b)
Costo:
with tf.name_scope("cost") as scope:
cost = tf.reduce_sum(tf.square(activation - Y)) / (2 * m)
tf.summary.scalar("cost", cost)
Formación:
with tf.name_scope("train") as scope:
optimizer = tf.train.GradientDescentOptimizer(0.07).minimize(cost)
Sesión TensorFlow:
with tf.Session() as sess:
merged = tf.summary.merge_all()
writer = tf.summary.FileWriter(log_file, sess.graph)
Nota: fusionado y escritor forman parte de la estrategia TensorBoard para rastrear el comportamiento del modelo.
init = tf.global_variables_initializer()
sess.run(init)
Repitiendo 1.5k veces el bucle de entrenamiento:
for step in range(1500):
result, _ = sess.run([merged, optimizer], feed_dict={X: np.asarray(train_X), Y: np.asarray(train_Y)})
writer.add_summary(result, step)
Costo de entrenamiento de impresión:
training_cost = sess.run(cost, feed_dict={X: np.asarray(train_X), Y: np.asarray(train_Y)})
print "Training Cost: ", training_cost, "W=", sess.run(W), "b=", sess.run(b), '\n'
Predicción concreta basada en el modelo entrenado:
print "Prediction for 3.5 years"
predict_X = np.array([3.5], dtype=np.float32).reshape([1, 1])
predict_X = (predict_X - mean) / std
predict_Y = tf.add(tf.matmul(predict_X, W), b)
print "Child height(Y) =", sess.run(predict_Y)
Rutina principal
def main():
train_X, train_Y = read_data()
train_X = feature_normalize(train_X)
run_training(train_X, train_Y)
Nota: recuerde revisar las dependencias de las funciones. read_data , feature_normalize y run_training
Rutina de normalización
def feature_normalize(train_X):
global mean, std
mean = np.mean(train_X, axis=0)
std = np.std(train_X, axis=0)
return np.nan_to_num((train_X - mean) / std)
Leer rutina de datos
def read_data():
global m, n
m = 50
n = 1
train_X = np.array(
Datos internos de la matriz.
).astype('float32')
train_Y = np.array(
Datos internos de la matriz.
).astype('float32')
return train_X, train_Y