美文网首页
学习tensorflow的第一篇文章

学习tensorflow的第一篇文章

作者: finaliver | 来源:发表于2019-04-29 19:53 被阅读0次

初学者,先从第一段代码看起:

import tensorflow as tf
import numpy as np

# np.random.rand(100)函数为创建一个array,包含100个数,每个数的范围是区间[0,1),类型定义为numpy.float32
x_data = np.random.rand(100).astype("float32")

# y_data的赋值公式,y_data是1维数组,包含100个数
y_data = x_data * 0.1 + 0.3

# tf.random_uniform([1], -1.0, 1.0)创建了一个张量,该张量是一个1维数组,从[-1.0, 1.0)的均匀分布函数中取值
# tf.zeros([1]) 创建了一个张量,该张量是一个1维数组,取值为0
# Variable函数为使用变量初始化张量,W这个张量的初始值是一个[-1.0, 1.0)的随机值,b这个张量的初始值是0
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.zeros([1]))
# y这个张量的初始值是x_data(100个随机数)乘以W(一个随机值)加b(0)
y = x_data * W + b

# 自定义损失函数:tf.square(y - y_data)为获得y和y_data的方差(用于看离散程度),y越接近y_data则表示W和b越正确,这里差的平方需要无限接近于0
# tf.reduce_mean是张量降维函数,这里的作用是获取数组方差的平均值
loss = tf.reduce_mean(tf.square(y - y_data))
# 初始化一个梯度下降优化函数(GradientDescentOptimizer),学习率为0.5
optimizer = tf.train.GradientDescentOptimizer(0.5)
# minimize函数通过更新张量数据,实现对loss的最小化
train = optimizer.minimize(loss)

# global_variables_initializer汇总所有全局变量的初始化器
init = tf.global_variables_initializer()

# 运行
sess = tf.Session()
sess.run(init)

# 打印
for step in range(301):
    sess.run(train)
    # 每训练20次打印
    if step % 20 == 0:
        print(step, sess.run(W), sess.run(b))

画一个图来理解这段代码:首先我们要找的是一个Y_DATA = X_DATA * 0.1 + 0.3的标准函数,这个函数在图上就是一条直线。我们现在要做的就是用tensorflow去找到这条线的位置(线的位置其实就是X_DATA和Y_DATA的关系),如果f(x_data)= y_data,那么就是通过tensorflow去找到f()函数。

已知函数是 y_data = x_data * W + b,已知W取值范围是[0,1),然后去找W和b。

先随机生成一个W值(取值范围是[0,1),然后用函数生成一个Y值(红点)

因为W值跟最终结果不符,所以这个点并不在我们需要的这个函数线上,而是有偏离。

然后用概率论中最常用的计算偏离量的函数“方差”进行统计,方差即表示这个点跟函数线的差异度。

我们用100个数去计算方差,再取平均数,这么做的目的是减小单个数的差异性。

这个时候我们会获取到一个方差平均值,这个方差平均值为0时,就表示我们的W和b完全正确,这个时候怎么做呢?

我们采用梯度下降算法去不停地减小这个方差平均值,让这个值趋于0即可。

1.PNG

下面这个图可以理解为:方差平均值就是一个函数上某个点的导数,梯度下降算法可以理解为在这个函数上去找导数为0的点的过程,即从Y的高位下降到低位。

2.PNG

相关文章

网友评论

      本文标题:学习tensorflow的第一篇文章

      本文链接:https://www.haomeiwen.com/subject/mevunqtx.html