线性回归高阶 API 实现

tf.keras.layers.Dense提供一个线性计算过程,dense是指全连接层的意思

model = tf.keras.layers.Dense(units=1) # 实例化线性层

结果为<tensorflow.python.keras.layers.core.Dense at 0x215aaadc780>

import tensorflow as tf
import matplotlib.pyplot as plt
TRUE_W = 3.0
TRUE_b = 2.0
NUM_SAMPLES = 100

# 初始化随机数据
X = tf.random.normal(shape=[NUM_SAMPLES, 1]).numpy()
noise = tf.random.normal(shape=[NUM_SAMPLES, 1]).numpy()
y = X * TRUE_W + TRUE_b + noise  # 添加噪声

plt.scatter(X, y)

 

损失函数无需再自行构造,直接使用 TensorFlow 提供的平方损失函数 
tf.keras.losses.mean_squared_error 计算
tf.reduce_sum 求得全部样本的平均损失

model = tf.keras.layers.Dense(units=1) # 实例化线性层

EPOCHS = 20
LEARNING_RATE = 0.002
for epoch in range(EPOCHS):  # 迭代次数
    with tf.GradientTape() as tape:  # 追踪梯度
        y_ = model(X)
        loss = tf.reduce_sum(tf.keras.losses.mean_squared_error(y, y_))  # 计算损失

    grads = tape.gradient(loss, model.variables)  # 计算梯度
    optimizer = tf.keras.optimizers.SGD(LEARNING_RATE)  # 随机梯度下降
    optimizer.apply_gradients(zip(grads, model.variables))  # 更新梯度
    print(f'Epoch [{epoch}/{EPOCHS}], loss [{loss}]')
plt.scatter(X, y)
plt.plot(X, model(X), c='r')

高阶函数这里不需要定义线性函数,定义损失函数以及定义优化算法

posted on 2020-03-28 22:32  蝶影漫舞  阅读(210)  评论(0编辑  收藏  举报