现在面临这样一个任务:
乘坐出租车的时候,会有一个10元的起步价,只要上车就需要收取。出租车每行驶1公里,需要再支付每公里2元的行驶费用。
当一个乘客坐完出租车之后,车上的计价器需要算出来该乘客需要支付的乘车费用。正常的计算方法: total_fee = w *
distance_travelled + b
接下来,把问题稍微变换一下,现在知道乘客每次乘坐出租车的公里数,也知道乘客每次下车的时候支付给出租车司机的总费用。
但是并不知道乘车的起步价,以及每公里行驶费用是多少。希望让机器从这些数据当中学习出来计算总费用的规则。
想要让机器学习程序通过数据学习出来下面的公式当中的参数 w 和参数 b(这是一个非常简单的示例,所以w和b都是浮点数,随着对深度学习了解的深入,
你将会知道w和b通常情况下会是矩阵和向量)。这样,当下次乘车的时候,知道了行驶里程distance_travelled的时候,
就可以估算出来用户的总费用total_fee了。
import paddle print("paddle " + paddle.__version__) # prepare data x_data =
paddle.to_tensor([[1.], [3.0], [5.0], [9.0], [10.0], [20.0]]) y_data =
paddle.to_tensor([[12.], [16.0], [20.0], [28.0], [30.0], [50.0]]) # define
calculate model linear = paddle.nn.Linear(in_features=1, out_features=1) #
prepare run paddle w_before_opt = linear.weight.numpy().item() b_before_opt =
linear.bias.numpy().item() print("w before optimize: {}".format(w_before_opt))
print("b before optimize: {}".format(b_before_opt)) """ how to learn
衡量差距的函数(一个公式)就是损失函数,用来调整参数的方法就是优化算法。 用最简单的均方误差(mean square
error)作为损失函数(paddle.nn.MSELoss); 和最常见的优化算法SGD(stocastic gradient
descent)作为优化算法(传给paddle.optimizer.SGD的参数learning_rate,你可以理解为控制每次调整的步子大小的参数)。
""" mse_loss = paddle.nn.MSELoss() sgd_optimizer =
paddle.optimizer.SGD(learning_rate=0.001, parameters = linear.parameters()) #
run optimizer (learning) total_epoch = 5000 for i in range(total_epoch):
y_predict = linear(x_data) loss = mse_loss(y_predict, y_data) loss.backward()
sgd_optimizer.step() sgd_optimizer.clear_grad() if i % 1000 == 0: print("epoch
{} loss {}".format(i, loss.numpy())) print("finished training, loss
{}".format(loss.numpy())) # result w_after_opt = linear.weight.numpy().item()
b_after_opt = linear.bias.numpy().item() print("w after optimize:
{}".format(w_after_opt)) print("b after optimize: {}".format(b_after_opt))
运行结果输出:
import imp
paddle 2.3.2
w before optimize: 1.2779237031936646
b before optimize: 0.0
epoch 0 loss [269.062]
epoch 1000 loss [8.225423]
epoch 2000 loss [1.8391448]
epoch 3000 loss [0.4112188]
epoch 4000 loss [0.09194404]
finished training, loss [0.02058855]
w after optimize: 2.0182714462280273
b after optimize: 9.76637077331543
经过机器学习,已经算出了这两个参数值是2.0182714462280273,9.76637077331543
如果样本越多,学习时间越长,就会越接近2和10
这就是最简单的机器学习 Helloword