这时,我们的问题就转化为最小化成本函数值,如图 6 所示,TensorFlow 试图以有效的方式更新参数,并最终达到最佳的可能值。每个更新所有参数的步骤称为 epoch。 图 6. 无论哪个参数 w,最优的成本函数值都是最小的。成本函数的定义是真实值与模型响应之间的误差的范数(norm,可以是 2 次方、绝对值、3 次方……)。最后,响应值由模型的函数计算得出。 在本例中,成本函数定义为误差的和(sum of errors)。通常用实际值 f(x) 与预测值 M(w,x) 之间的平方差来计算预测 x 的误差。因此,atv,成本函数值是实际值和预测值之间的平方差之和,如图 7 所示。 图 7. 成本函数值是模型响应与真实值之间的逐点差异的范数。 更新列表 1 中的代码,见列表 2。该代码定义了成本函数,并要求 TensorFlow 运行(梯度下降)优化来找到最佳的模型参数。 列表 2:求解线性回归 importtensorflow astf //#Aimportnumpy asnp //#Aimportmatplotlib.pyplot asplt //#Alearning_rate =0.01//#Btraining_epochs =100//#Bx_train =np.linspace(-1, 1, 101) //#Cy_train =2 * x_train + np.random.randn(*x_train.shape) *0.33//#CX =tf.placeholder("float") //#DY =tf.placeholder("float") //#Ddefmodel(X, w): //#E returntf.multiply(X, w)w =tf.Variable(0.0, name="weights") //#Fy_model =model(X, w) //#Gcost = tf.square(Y-y_model) //#Gtrain_op =tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) //#Hsess = tf.Session() //#Iinit = tf.global_variables_initializer() //#Isess.run(init) //#Iforepoch inrange(training_epochs): //#J for(x, y) inzip(x_train, y_train): //#K sess.run(train_op, feed_dict={X: x, Y: y}) //#Lw_val =sess.run(w) //#Msess.close() //#Nplt.scatter(x_train, y_train) //#Oy_learned =x_train*w_val //#Pplt.plot(x_train, y_learned, 'r') //#Pplt.show() //#P #A:载入 TensorFlow 包用于学习算法,载入 NumPy 包来设置初始数据,载入 matplotlib 包来可视化数据 #B:定义学习算法使用的一些常数,称为超参数 #C:初始化线性模拟数据 #D:将输入和输出节点设置为占位符,而真实数值将传入 x_train 和 y_train #E:将模型定义为 y=w*x #F:设置权重变量 #G:定义成本函数 #H:定义在学习算法的每次迭代中将被调用的操作 #I:设置会话并初始化所有变量 #J:多次循环遍历数据集 #K:循环遍历数据集中的每个数据 #L:更新模型参数以尝试最小化成本函数 #M:得到最终参数值 #N:关闭会话 #O:绘制原始数据 #P:绘制最佳拟合直线 恭喜你使用 TensorFlow 解决了线性回归!另外,只需要对列表 2 稍加修改就能解决回归中的其它问题。整个流程包括使用 TensorFlow 更新模型参数,如图 8 所示。
图 8. 学习算法更新模型的参数以最小化给定的成本函数。 原文链接:https://machinelearning.technicacuriosa.com/2017/04/22/machine-learning-with-tensorflow/ 读者福利:即日起至 GMIS 2017 大会当天,读者在头条文章下留言,机器之心会在次日选出最专业或最有见解的一条评论赠送 GMIS 2017 双日票一张! 查看全部嘉宾阵容并报名参与机器之心 GMIS 2017,请点击「阅读原文」。 (责任编辑:本港台直播) |