Python使用tensorflow中梯度下降算法求解变量最优值

TensorFlow是一个用于人工智能的开源神器,是一个采用数据流图(data flow graphs)用于数值计算的开源软件库。数据流图使用节点(nodes)和边线(edges)的有向图来描述数学计算,图中的节点表示数学操作,也可以表示数据输入的起点或者数据输出的终点,而边线表示在节点之间的输入/输出关系,用来运输大小可动态调整的多维数据数组,也就是张量(tensor)。TensorFlow可以在普通计算机、服务器和移动设备的CPU和GPU上展开计算,具有很强的可移植性,并且支持C++、Python等多种语言。

import tensorflow as tf import numpy as np import time

#使用 NumPy 生成随机数据, 总共 2行100列个点. x_data = np.float32(np.random.rand(2, 200)) #矩阵乘法 #这里的W=[0.100, 0.200]和b=0.300是理论数据

通过后面的训练来验证 y_data = np.dot([0.100, 0.200], x_data) + 0.300

#构造一个线性模型,训练求解W和b #初始值b = [0.0] b = tf.Variable(tf.zeros([1])) #初始值W为1x2的矩阵,元素值介于[-1.0, 1.0]区间 W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0)) #构建训练模型,matmul为矩阵乘法运算 y = tf.matmul(W, x_data) + b

#最小均方差 loss = tf.reduce_mean(tf.square(y - y_data)) #使用梯度下降算法进行优化求解 optimizer = tf.train.GradientDescentOptimizer(0.5) train = optimizer.minimize(loss)

#初始化变量 init = tf.global_variables_initializer()

with tf.Session() as sess: #初始化 sess.run(init)

#拟合平面,训练次数越多越精确,但是也没有必要训练太多次 for step in range(0, 201): sess.run(train) #显示训练过程,这里演示了两种查看变量值的方法 print(step, sess.run(W), b.eval())

运行结果如下,可以发现求解的结果非常接近理论值,为避免浪费大家流量,这里省略了中间的180个训练结果。

0 [[ 0.15414073 0.32496157]] [ 0.43636867] 1 [[ 0.03701844 0.20617545]] [ 0.21209587] 2 [[ 0.10094656 0.26214167]] [ 0.32871172] 3 [[ 0.07112053 0.22834063]] [ 0.26936483] 4 [[ 0.08938536 0.24124807]] [ 0.30078542] 5 [[ 0.08256587 0.23040327]] [ 0.28532556] 6 [[ 0.08844876 0.23214042]] [ 0.29402208] 7 [[ 0.08755529 0.22768299]] [ 0.29021722] 8 [[ 0.08995744 0.22669716]] [ 0.29283032] 9 [[ 0.09047545 0.2241728 ]] [ 0.29209939] 10 [[ 0.09179883 0.22267541]] [ 0.2930637] ... 191 [[ 0.10000042 0.20000042]] [ 0.29999956] 192 [[ 0.1000004 0.20000039]] [ 0.29999959] 193 [[ 0.10000037 0.20000036]] [ 0.29999962] 194 [[ 0.10000035 0.20000033]] [ 0.29999962] 195 [[ 0.10000034 0.20000032]] [ 0.29999965] 196 [[ 0.10000032 0.2000003 ]] [ 0.29999968] 197 [[ 0.1000003 0.20000029]] [ 0.29999968] 198 [[ 0.10000029 0.20000027]] [ 0.29999971] 199 [[ 0.10000027 0.20000026]] [ 0.29999971] 200 [[ 0.10000026 0.20000026]] [ 0.29999974]

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2016-12-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码洞

人工不智能之sklearn聚类

线性回归是一种有监督算法,提供了输入数据x和参考目标值y,参考目标提供了一种纠错机制,是对预测结果y_的监督,如果y和y_相差过大,说明拟合的模型可能存在问题。...

7010
来自专栏Coding迪斯尼

RNN,具有记忆功能神经网络的理解与实现

我们当前掌握的网络类型,统称为feed forward网络。这种网络的特点是,当我们把很多条数据输入网络进行训练时,网络没有“记忆性”,也就是网络认为前一条输入...

12720
来自专栏PaddlePaddle

【文本分类】基于DNN/CNN的情感分类

导语 PaddlePaddle提供了丰富的运算单元,帮助大家以模块化的方式构建起千变万化的深度学习模型来解决不同的应用问题。这里,我们针对常见的机器学习任务,提...

50740
来自专栏深度学习那些事儿

深度学习中数据集很小是一种什么样的体验

今天提一个比较轻松的话题,简单探讨数据集大小对深度学习训练的影响。 不知道大家有没有看过这篇文章:Don’t use deep learning your d...

2.2K40
来自专栏一名叫大蕉的程序员

尝试克服一下小伙伴对神经网络的恐惧No.26

我是小蕉。 研表究明,这的网官的demo,代码确实的是己打自的。 这两天仔细研究了一下神经网络,简单的结构其实没想象中那么恐怖,只是我们自己吓自己,今天希望能把...

20660
来自专栏CVer

风格迁移三部曲(二)之固定风格任意内容的快速风格迁移

上篇介绍了风格迁移三部曲(一)之普通风格迁移,本文将继续介绍第二种风格迁移方式:固定风格任意内容的快速风格迁移。

18800
来自专栏机器之心

资源 | 一个Python特征选择工具,助力实现高效机器学习

项目地址:https://github.com/WillKoehrsen/feature-selector

19720
来自专栏CDA数据分析师

资源 | 一个Python特征选择工具,助力实现高效机器学习

项目地址:https://github.com/WillKoehrsen/feature-selector

18500
来自专栏PPV课数据科学社区

K-means 在 Python 中的实现

K-means算法简介 K-means是机器学习中一个比较常用的算法,属于无监督学习算法,其常被用于数据的聚类,只需为它指定簇的数量即可自动将数据聚合到多类中,...

37390
来自专栏Small Code

【TensorFlow】TensorFlow 的多层感知器(MLP)

前面有几篇博文讲了使用 TensorFlow 实现线性回归和逻辑斯蒂回归,这次来说下多层感知器(Multi-Layer Perceptron)的 TensorF...

472110

扫码关注云+社区

领取腾讯云代金券