使用线性函数生成数据集
使用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的值
输出结果
可以看出训练完数据后,k值非常接近3,b值非常接近5