TensorFlow三维平面拟合总结


这是自己学习TensorFlow时遇到的第一个例程,想着是能搞明白点,所以小结一下,以防自己忘记了。但是,确实有好多东西自己是将不明白的,所以这个也仅供参考。
(1)代码运行:
本人使用的python3版本,但是官方例程给的是python2的代码,所以在运行前需要进行修改:
代码中应该修改的地方:
for step in xrange(0, 201):  这是python2中的函数,在python3中xrange已经改成了range。
print step, sess.run(W), sess.run(b) 这也是python2中的内容。Python3中应该是print (step, sess.run(W), sess.run(b))
TensorFlow第一个例子说明:
(2)数学知识
平面的表示方法:(一般式)
Ax+By+Cz+D=0  
注:其中A,B,C,D为已知常数,并且A,B,C不同时为零。
所以程序中的x_data即可表示一个直角坐标面中的一个点(x,z)。而经过方程y_data = np.dot([0.100, 0.200], x_data) + 0.300求出相应的第三个数值即可组成(x,y,z)且这里所求的点均在平面y = np.dot([0.100, 0.200], x_data) + 0.300上。

(3)程序中所用到的函数
tf.random_uniform使用
tf.random_uniform((4, 4),minval=low,maxval=high,dtype=tf.float32)))返回4*4的矩阵,产生于low和high之间,产生数据的类型为32位浮点型,产生的值是均匀分布的。
numpy.random.rand(d0, d1, …, dn)的随机样本位于[0, 1)中。
numpy.random.rand(2,100)返回一个2*100的矩阵,且所有数据均在[0,1)中。
tf.matmul()的使用方法
该函数的作用是实现两个矩阵的相乘,运算法则与矩阵相乘无异。
在tensorflow环境下运行输入了一个数据a,再使用Matmul函数来计算矩阵a*a,但是在打印结果时出现的是:

tf.multiply()的使用方法
由于在深度学习中高频率的用到这个函数,所以做一下记录
format:multiply(x, y, name=None)
(注意,这里强调了这两个相乘的数x,y要有相同的数据类型,不然就会报错)
Returns x * y element-wise. (这里指multiply这个函数实现的是元素级别的相乘,也就是两个相对应位置上的元素各自相乘,而不是矩阵乘法,注意和tf.matmul区别)


tf.reduce_mean
tensorflow中有一类在tensor的某一维度上求值的函数。
求平均值tf.reduce_mean(input_tensor, reduction_indices=None, keep_dims=False, name=None)
参数1--input_tensor:待求值的tensor。
参数2--reduction_indices:在哪一维上求解。
参数(3)(4)可忽略
举例说明:
# 'x' is [[1., 2.]
 [3., 4.]]
x是一个2维数组,分别调用reduce_*函数如下:
首先求平均值:
tf.reduce_mean(x) ==> 2.5 #如果不指定第二个参数,那么就在所有的元素中取平均值 tf.reduce_mean(x, 0) ==> [2., 3.] #指定第二个参数为0,则第一维的元素取平均值,即每一列求平均值 tf.reduce_mean(x, 1) ==> [1.5, 3.5] #指定第二个参数为1,则第二维的元素取平均值,即每一行求平均值
Class GradientDescentOptimizer
Optimizer that implements the gradient descent algorithm.
实现梯度下降算法的优化器。

Construct a new gradient descent optimizer.
构建一个新的渐变下降优化器。
learning_rate: A Tensor or a floating point value. The learning rate to use.  一个张量或者一个浮点值,学习效率。
use_locking: If True use locks for update operations.
use_locking:如果True用于更新操作的锁定。
name: Optional name prefix for the operations created when applying gradients. Defaults to "GradientDescent".
名称:应用渐变时创建的操作的可选名称前缀。 默认为“梯度下降”。

Variable的使用[这个理解起来有点难,需要之后不断地思考]
tensorflow中很重要的一个部分就是Variable,它能构建一个变量,在计算图的运算过程中,其值会一直保存到程序运行结束,而一般的tensor张量在tensorflow运行过程中只是在计算图中流过,并不会保存下来,因此varibale主要用来保存tensorflow构建的一些结构中的参数,这样,这些参数才不会随着运算的消失而消失,才能最终得到一个模型。比如神经网络中的权重和bias等,在训练过后,总是希望这些参数能够保存下来,而不是直接就消失了,所以这个时候要用到Variable。注意,所有和varible有关的操作在计算的时候都要使用session会话来控制,包括计算,打印等等。



(4)训练过程
给出一组基本的数据,计算出这组数据所在的平面,即分别计算出每组数据的第三个点。
再建立需要工作的线性模型、偏置值、权重参数等内容。
利用梯度下降算法进行训练,这点我也说不明白,但是可以参照反向传播算法进行理解,经过以上的几步就把自己的神经网络建立起来了接下来就是启动图和开始训练等操作。个人觉得从计算最小方差之后的代码用途就比较模糊了,建议不是很明白的去看看网络上反向传播的相关内容。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值