训练一个线性模型

238 阅读1分钟

参考文章:juejin.cn/post/684490…

使用线性函数生成数据集

使用numpy生成1000个数值 x

x_data = np.random.rand(1000)

根据线性函数 y = kx + b 生成 y 值,假设k=3,b=5

y_data = x_data * 3 + 5

至此,x_data 和 y_data 就是我们要训练的真实数据,使用线性模型训练这个数据集,求k,b值

定义k,b数据类型

k = tf.Variable(0.0) # float64, 默认0.0
b = tf.Variable(0.0)

定义损失函数,让数据(x, y)到直线(y=kx+b)距离总和最短

def loss():
    y = k * x_data + b 
    return tf.reduce_mean(tf.square(y_data - y))
  • y_data - y: 真实值与预测值的差
  • tf.square: 平方
  • tf.reduce_mean: 计算平均值

定义模型优化器,降低维度(原理可以搜索“梯度下降”)

optimizer = tf.keras.optimizers.SGD(0.2)
train = optimizer.minimize(loss, var_list = [k, b])

train 即是我们需要训练的数据,即从训练数据中探索线性模型的k,b值

训练数据

init = tf.compat.v1.global_variables_initializer()
with tf.compat.v1.Session() as session:	        # 定义会话上下文
    session.run(init)	                        # 执行初始化操作
    for step in range(3000):                    # 训练3000次
        session.run(train)	                # 执行训练操作
        if step % 20 == 0: 
            print(step, session.run([k, b]))	# 打印出k和b的值

输出结果

image.png

可以看出训练完数据后,k值非常接近3,b值非常接近5