es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La regresión lineal simple en Tensorflow produce un coeficiente cercano a cero.

Estoy intentando una regresión lineal simple en Tensorflow con solo una variable independiente. Una trama de mis datos muestra que el coeficiente debería estar cerca de 1, y de hecho, si lo corro usando sklearn.linear_model.LinearRegression, obtengo un resultado sensato de alrededor de 0,90.

Sin embargo, al ejecutarlo en Tensorflow usando este tutorial, produce un coeficiente muy cercano a cero. Pude obtener un resultado racional de Tensorflow usando números aleatorios. He intentado ajustar la tasa de aprendizaje o el número de épocas sin ningún efecto significativo.

El MRE incluye datos reales y debería producir un coeficiente de 0.8975 de sklearn pero 0.00045 de Tensorflow. He considerado que está atrapado en un mínimo local, pero ninguno de los ejemplos que puedo encontrar de tal problema funciona para mi problema.

import numpy as np
import tensorflow as tf
from sklearn import linear_model

learning_rate = 0.1
epochs = 100

x_train = np.array([-0.00055, 0.00509, -0.0046, -0.01687, -0.0047, 0.00348, 
                0.00042, -0.00208, -0.01207, -0.0007, 0.00408, -0.00182, 
                -0.00294, -0.00113, 0.0038, -0.00645, 0.00113, 0.00268, 
                -0.0045, -0.00381, 0.00298, 0, -0.00184, -0.00212, 
                -0.00213, -0.01224, 0.00072, 0, -0.00331, 0.00534, 
                0.00675, -0.00285, -0.00429, 0.00489, -0.00286, 0.00158, 
                0.00129, 0.00472, 0.00555, -0.00467, -0.00231, -0.00231, 
                0.00159, -0.00463, 0.00174, 0, -0.0029, 
                -0.00349, 0.01372, -0.00302])

y_train = np.array([0.00125, 0.00218, -0.00373, -0.00999, -0.00441, 
                0.00412, 0.00158, -0.00094, -0.01513, -0.00064, 0.00416, 
                -0.00191, -0.00607, 0.00161, 0.00289, -0.00416, 
                0.00096, 0.00321, -0.00672, -0.0029, 0.00129, -0.00032, 
                -0.00387, -0.00162, -0.00292, -0.01367, 0.00198, 
                0.00099, -0.00329, 0.00693, 0.00459, -0.00294, -0.00164, 
                0.00328, -0.00425, 0.00131, 0.00131, 0.00524, 0.00358,
                -0.00422, -0.00065, -0.00359, 0.00229, 0, 0.00196, 
                -0.00065, -0.00391, -0.0108, 0.01291, -0.00098])

regr = linear_model.LinearRegression()
regr.fit(x_train.reshape(-1, 1), y_train.reshape(-1, 1))
print('Coefficients: ', regr.coef)

weight = tf.Variable(0.)
bias = tf.Variable(0.)

for e in range(epochs):
    with tf.GradientTape() as tape:
        y_pred = weight*x_train + bias
        loss = tf.reduce_mean(tf.square(y_pred - y_train))
        gradients = tape.gradient(loss, [weight,bias])
        weight.assign_sub(gradients[0]*learning_rate)
        bias.assign_sub(gradients[1]*learning_rate)

print(weight.numpy(), 'weight', bias.numpy(), 'bias')
Tags:  ,

Answer

  1. Avatar for davy.ai

    P: ¿Por qué el coeficiente es cercano a cero en la implementación de TensorFlow, mientras que es razonable en la implementación de sklearn?

    Puede haber varias razones para esta discrepancia. Un posible problema es que TensorFlow se esté quedando atrapado en un mínimo local. Otro posible problema es que la tasa de aprendizaje o el número de épocas podría no estar bien ajustado, lo que lleva a una convergencia lenta. Además, la implementación de TensorFlow podría estar sufriendo de inestabilidad numérica debido al gran rango dinámico de los datos de entrada. Finalmente, es posible que haya un error en la propia implementación.

    P: ¿Qué pasos de depuración ya se han tomado?

    Se ajustó la tasa de aprendizaje y el número de épocas sin ningún efecto significativo. Los números aleatorios produjeron un resultado más razonable en la implementación de TensorFlow, lo que indica que la implementación no parece ser el problema. Los autores también han considerado la posibilidad de quedarse atrapados en un mínimo local, pero ninguna de las soluciones propuestas funcionó para el problema en cuestión.

Comments are closed.