首页 > 解决方案 > 使用 tensorflow 2.0 执行线性回归

问题描述

如何在 Tensorflow 2.0 中执行线性回归?示例或教程链接将不胜感激。YouTube 上的所有教程都使用 tensorflow 1

标签: tensorflow

解决方案


示例 1:使用Tensorflow 2.0.0进行回归:

import tensorflow as tf
# tensorflow 2.0.0 
class Model:
    def __init__(self):
        self.W = tf.Variable(7.0) # initial value for model parameter W
        self.b = tf.Variable(0.0) #initial value for model bias b

    def model(self, x):
        return self.W * x + self.b

    def loss(predicted_label, target_label):
        return tf.reduce_mean(tf.square(predicted_label - target_label))

    def train(self,inputs, outputs, learning_rate):
        with tf.GradientTape() as t:
            current_loss = Model.loss(self.model(inputs), outputs)
        #backpropagation
        dW, db = t.gradient(current_loss, [self.W, self.b])
        self.W.assign_sub(learning_rate * dW)
        self.b.assign_sub(learning_rate * db)
        return current_loss
    def run(self):
        import matplotlib.pyplot as plt
        # Generate train data when true W=2.0 and b=3.0
        TRUE_W = 2.0
        TRUE_b = 3.0
        NUM_INSTANCES = 500 # number of tarin data

        inputs  = tf.random.normal(shape=[NUM_INSTANCES])
        noise   = tf.random.normal(shape=[NUM_INSTANCES])
        outputs = inputs * TRUE_W + TRUE_b + noise

        print("Model before train (red dots):")
        plt.scatter(inputs, outputs, c='b')
        plt.scatter(inputs, self.model(inputs), c='r')
        plt.show()

        epochs = range(50)
        for epoch in epochs:

            current_loss=self.train(inputs, outputs, learning_rate=0.1)
            if epoch%10==0:
                print('Epoch %2d: loss=%2.5f' %
                           (epoch, current_loss))

        print("Model after train (red dots):")
        plt.scatter(inputs, outputs, c='b')
        plt.scatter(inputs, self.model(inputs), c='r')
        plt.show()
ob=Model()
ob.run()

示例 2:使用Tensorflow 2.0.0keras 优化器进行回归

import tensorflow as tf
#Tensorflow 2.0.0
class Model:
    def __init__(self):
        self.W = tf.Variable(5.0) 
        self.b = tf.Variable(0.0)

    def model(self):
        return self.W * self.inputs + self.b

    def loss(self):
        return tf.reduce_mean(tf.square(self.model() - self.outputs))

    def run(self):
        import matplotlib.pyplot as plt
        # Generate train data when true W=4.0 and b=1.0
        TRUE_W = 2.0
        TRUE_b = 3.0
        NUM_INSTANCES = 500 # number of tarin data

        print("Model befor train (red dots):")
        self.inputs  = tf.random.normal(shape=[NUM_INSTANCES])
        noise   = tf.random.normal(shape=[NUM_INSTANCES])
        self.outputs = self.inputs * TRUE_W + TRUE_b + noise

        plt.scatter(self.inputs, self.outputs, c='b')
        plt.scatter(self.inputs, self.model(), c='r')
        plt.show()

        opt = tf.keras.optimizers.Adam(learning_rate=0.1)
        epochs = range(50)
        for epoch in epochs:
            opt.minimize(self.loss, var_list=[self.W,self.b])
            current_loss=self.loss()            
            if epoch%10==0:
                print('Epoch %2d: loss=%2.5f' %
                           (epoch, current_loss))

        print("Model after train (red dots):")
        plt.scatter(self.inputs, self.outputs, c='b')
        plt.scatter(self.inputs, self.model(), c='r')
        plt.show()
ob=Model()
ob.run()

希望这可以帮助。


推荐阅读