Как выполнить линейную регрессию с помощью TensorFlow

Линейная регрессия — это простая прогностическая модель, которая пытается предсказать целевую переменную с помощью линейной зависимости. В TensorFlow мы можем использовать tf.GradientTape для отслеживания градиента параметров нашей модели, а затем использовать эту информацию для оптимизации параметров нашей модели.

Вот простой пример линейной регрессии:

 
 
pythonimport numpy as np
import tensorflow as tf

# 生成一些样本数据
np.random.seed(0)
x_train = np.random.rand(100, 1).astype(np.float32)
y_train = 2 * x_train + np.random.randn(100, 1).astype(np.float32) * 0.3

# 定义线性回归模型
class LinearRegression:
def __init__(self, learning_rate=0.01):
self.learning_rate = learning_rate
self.weights = tf.Variable(tf.zeros([1]))
self.bias = tf.Variable(tf.zeros([1]))

def __call__(self, x):
return self.weights * x + self.bias

def loss(self, y_pred, y_true):
return tf.reduce_mean(tf.square(y_pred - y_true))

def train(self, x, y):
with tf.GradientTape() as tape:
y_pred = self(x)
loss = self.loss(y_pred, y)
gradients = tape.gradient(loss, [self.weights, self.bias])
self.weights.assign_sub(self.learning_rate * gradients[0])
self.bias.assign_sub(self.learning_rate * gradients[1])

# 训练模型
model = LinearRegression()
for epoch in range(1000):
model.train(x_train, y_train)
if epoch % 100 == 0:
print(f"Epoch {epoch}, Loss: {model.loss(model(x_train), y_train)}")

В этом примере мы сначала создаем некоторые обучающие данные. Наша модель представляет собой одномерную линейную регрессию, которая предсказывает, что целевая переменная является линейной функцией входных данных. Мы используем tf.GradientTape для отслеживания градиента параметров модели и используем этот градиент для обновления параметров нашей модели. Мы просматриваем все данные обучения в каждую эпоху и распечатываем потери каждые 100 эпох.

В приведенном выше коде мы определяем класс LinearReгрессия, который содержит веса и смещения модели и реализует три метода __call__: lossи train.

  • __call__Метод определяет, как модель прогнозирует y на основе входных данных x.
  • lossМетод вычисляет среднеквадратическую ошибку между прогнозируемым значением и истинным значением.
  • trainЭтот метод использует градиентный спуск для обновления весов и смещений модели.

Затем мы создали экземпляр LinearRegrade и обучили его 1000 итерациям. На каждой итерации мы model.train(x_train, y_train)обновляем веса и смещения модели , вызывая И текущие потери будут печататься каждые 100 эпох.

Это очень простая модель линейной регрессии. При фактическом использовании вам может потребоваться нормализовать данные, разобраться с пропущенными значениями, выбрать различные функции потерь и алгоритмы оптимизации и т. д.

 

Guess you like

Origin blog.csdn.net/babyai996/article/details/132666928