tensorflow基础概念

作者: 泛酸的桂花酒 | 来源:发表于2019-04-16 10:02 被阅读0次

1.什么是tensorflow

Tensorflow是神经网络框架。

2.Tensorflow中个重要概念

· Tensor:即张量,在TensorFlow的范畴里,可以简单的理解为多维数组

· Flow:中文翻译过来是“流”,它形象的表达了张量之间通过计算相互转化的过程

Tensorflow与传统的程序结构不一样,tensorflow将程序分为两个独立的部分,包括计算图定义,和执行两部分。

因为tensorflow是采用数据流图来计算,所以先创建一个数据流图,在将数据(以张量tensor的形式存在)放在数据流图中计算,节点(Nodes)在途中表示数学操作。训练模型的时候tensor会不断从数据流图的一个节点flow到另一个节点。

计算图:即包含着节点和边的网络。每个节点可以有0个或者多个输入,但是只有一个输出。

计算机图的执行:

以一个例子说明:


图片.png

用代码实现如下:

图片.png

由上图可以看见,代码分为两个部分,计算图和会话执行的两部分,1.2.为构建计算图的步骤,1获取了数据,并构建计算节点,执行会话的时候就是将数据放进计算图,使得数据在计算图中运行。

3. 会话控制

session 是 Tensorflow 为了控制,和输出文件的执行的语句. 运行 session.run() 可以获得你要得知的运算结果.这有点像是python打开文本处理的两种方式。

会话控制的两种方法:

# method 1

sess = tf.Session()

result = sess.run(product)

print(result)

sess.close()

# method 2

with tf.Session() as sess:

    result2 = sess.run(product)

    print(result2)# [[12]]

4.梯度下降原理

梯度下降法是属于优化问题其中的一个方法。在这里可以简单的理解为数学函数中的求导求微分。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。在tensorful中主要应用梯度下降方法。
如下图:假设从黑点开始,找到最低点是目标。从黑点开始算斜率(这个斜率就是梯度,用数学的角度讲就是微分),找到一个最大的即最陡的地方,然后再往前进一步,再计算其斜率,如此循环。才能找到这个最低点。其中步长不能太大也不能太小,太小的话,可能导致迟迟走不到最低点影响效率,太大的话,可能会错过最低点。


图片.png

5.用梯度下降优化线性回归问题

引入模块
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
构建数据
points_num = 100
vectors = []
用 Numpy 的正态随机分布函数生成 100 个点
这些点的(x, y)坐标值对应线性方程 y = 0.1 * x + 0.2
权重(Weight)为 0.1,偏差(Bias)为 0.2
for i in range(points_num):
    x1 = np.random.normal(0.0, 0.66)
    y1 = 0.1 * x1 + 0.3 + np.random.normal(0.0, 0.04)
    vectors.append([x1, y1])

x_data = [v[0] for v in vectors]  # 真实的点的 x 坐标
y_data = [v[1] for v in vectors]  # 真实的点的 y 坐标
图像 1 :展示 100 个随机数据点
plt.plot(x_data, y_data, 'r*', label="Original data")  # 红色星形的点
plt.legend()
plt.show()
绘出的效果如下:
图片.png
构建线性回归模型 Variable定义一个变量。random_uinifo用于产生一维的随机张量
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))  # 初始化 Weight
b = tf.Variable(tf.zeros([1]))                      # 初始化 Bias
y = W * x_data + b                                  # 模型计算出来的
定义 loss function(损失函数)或 cost function(代价函数)
对 Tensor 的所有维度计算 ((y - y_data) ^ 2) 之和 / N
reduce_mean计算张量的平均值,square平方。
loss = tf.reduce_mean(tf.square(y - y_data))
用梯度下降的优化器来最小化我们的 loss(损失)
一般设置小于1,值越大越有可能错过一些逼近真实曲线的点,太小会影响训练效率

minimize 接受了一个函数作为参数,这个函数做了下面的两件事情:
首先它对所有的x值通过我们在之前定义的pridict函数预测了y值。
然后它通过我们之前定义的损失函数返回了这些预测的均方误差。
minimize函数之后会自动调整这些变量(即系数w,b)来使得损失函数更小。
在运行训练迭代器之后,w,以及d就会是通过模型100次迭代之后学习到的结果了。

optimizer = tf.train.GradientDescentOptimizer(0.1)  
train = optimizer.minimize(loss)
创建会话
with tf.Session() as sess:
    # 初始化数据流图中的所有变量 (这一步一定要有)
    init = tf.global_variables_initializer()
    sess.run(init)
    # 训练 20 步
    for step in xrange(100):
        # 优化每一步
        sess.run(train)
        # 打印出每一步的损失,权重和偏差
        print("第 {} 步的 损失={}, 权重={}, 偏差={}".format(step, sess.run(loss), sess.run(W), sess.run(b)))
    # 图像 2 :绘制所有的点并且绘制出最佳拟合的直线
    plt.plot(x_data, y_data, 'r*', label="Original data")  # 红色星形的点
    plt.title("Linear Regression using Gradient Descent")  # 标题,表示 "梯度下降解决线性回归"
    plt.plot(x_data, sess.run(W) * x_data + sess.run(b), label="Fitted line")  # 拟合的线
    print(sess.run(W))
    plt.legend()
    plt.xlabel('x')
    plt.ylabel('y')
    plt.show()
打印出如下效果,可以看到是十分比较实际的y=0.1x + 0.3的效果
<pre>第 0 步的 损失=0.2615503668785095, 权重=[-0.5386478], 偏差=[0.06145719]
第 1 步的 损失=0.20130445063114166, 权重=[-0.4748752], 偏差=[0.11052281]
第 2 步的 损失=0.15636701881885529, 权重=[-0.4175892], 偏差=[0.14968537]
第 3 步的 损失=0.12244605273008347, 权重=[-0.366123], 偏差=[0.18093464]
第 4 步的 损失=0.09656181931495667, 权重=[-0.31987983], 偏差=[0.20586148]
第 5 步的 损失=0.07661882042884827, 权重=[-0.2783252], 偏差=[0.22573774]
第 6 步的 损失=0.06112353503704071, 权重=[-0.24098018], 偏差=[0.24158014]
第 7 步的 损失=0.04899679124355316, 权重=[-0.20741548], 偏差=[0.2542014]
第 8 步的 损失=0.03944816440343857, 权重=[-0.17724614], 偏差=[0.26425108]
第 9 步的 损失=0.0318911150097847, 权重=[-0.15012686], 偏差=[0.27224827]
第 10 步的 损失=0.025884980335831642, 权重=[-0.12574784], 偏差=[0.2786078]
第 11 步的 损失=0.02109493501484394, 权重=[-0.10383102], 偏差=[0.283661]
第 12 步的 损失=0.017263982445001602, 权重=[-0.08412677], 偏差=[0.2876727]
第 13 步的 损失=0.014193098992109299, 权重=[-0.06641099], 偏差=[0.29085425]
第 14 步的 损失=0.011726957745850086, 权重=[-0.05048241], 偏差=[0.2933745]
第 15 步的 损失=0.009743548929691315, 权重=[-0.03616025], 偏差=[0.29536825]
第 16 步的 损失=0.008146497420966625, 权重=[-0.02328211], 偏差=[0.29694307]
第 17 步的 损失=0.006859328597784042, 权重=[-0.01170211], 偏差=[0.29818475]
第 18 步的 损失=0.00582113629207015, 权重=[-0.00128914], 偏差=[0.29916176]
第 19 步的 损失=0.00498326076194644, 权重=[0.00807462], 偏差=[0.2999287]
第 20 步的 损失=0.004306729417294264, 权重=[0.01649503], 偏差=[0.30052903]
第 21 步的 损失=0.0037602675147354603, 权重=[0.02406726], 偏差=[0.30099744]
第 22 步的 损失=0.00331873563118279, 权重=[0.03087685], 偏差=[0.30136147]
第 23 步的 损失=0.002961900783702731, 权重=[0.03700069], 偏差=[0.3016431]
第 24 步的 损失=0.002673461800441146, 权重=[0.0425079], 偏差=[0.30185977]
第 25 步的 损失=0.0024402739945799112, 权重=[0.04746062], 偏差=[0.30202532]
第 26 步的 损失=0.0022517316974699497, 权重=[0.05191472], 偏差=[0.3021508]
第 27 步的 损失=0.0020992732606828213, 权重=[0.05592044], 偏差=[0.30224487]
第 28 步的 损失=0.0019759831484407187, 权重=[0.05952293], 偏差=[0.3023145]
第 29 步的 损失=0.00187627540435642, 权重=[0.06276281], 偏差=[0.30236512]
第 30 步的 损失=0.0017956355586647987, 权重=[0.0656766], 偏差=[0.30240107]
第 31 步的 损失=0.0017304145731031895, 权重=[0.06829713], 偏差=[0.30242568]
第 32 步的 损失=0.0016776630654931068, 权重=[0.07065392], 偏差=[0.3024417]
第 33 步的 损失=0.0016349953366443515, 权重=[0.07277352], 偏差=[0.30245116]
第 34 步的 损失=0.0016004836652427912, 权重=[0.07467983], 偏差=[0.30245575]
第 35 步的 损失=0.0015725686680525541, 权重=[0.0763943], 偏差=[0.30245674]
第 36 步的 损失=0.0015499889850616455, 权重=[0.07793624], 偏差=[0.30245513]
第 37 步的 损失=0.0015317249344661832, 权重=[0.07932302], 偏差=[0.30245167]
第 38 步的 损失=0.0015169511316344142, 权重=[0.08057026], 偏差=[0.30244693]
第 39 步的 损失=0.0015050009824335575, 权重=[0.081692], 偏差=[0.3024414]
第 40 步的 损失=0.0014953347854316235, 权重=[0.08270086], 偏差=[0.30243537]
第 41 步的 损失=0.001487515983171761, 权重=[0.08360821], 偏差=[0.30242914]
第 42 步的 损失=0.0014811910223215818, 权重=[0.08442426], 偏差=[0.30242288]
第 43 步的 损失=0.0014760750345885754, 权重=[0.08515821], 偏差=[0.3024167]
第 44 步的 损失=0.001471936353482306, 权重=[0.08581831], 偏差=[0.30241075]
第 45 步的 损失=0.0014685888309031725, 权重=[0.086412], 偏差=[0.30240503]
第 46 步的 损失=0.0014658808941021562, 权重=[0.08694594], 偏差=[0.30239964]
第 47 步的 损失=0.0014636905398219824, 权重=[0.08742617], 偏差=[0.30239457]
第 48 步的 损失=0.0014619188150390983, 权重=[0.08785808], 偏差=[0.30238983]
第 49 步的 损失=0.0014604852767661214, 权重=[0.08824653], 偏差=[0.30238542]
第 50 步的 损失=0.0014593261294066906, 权重=[0.0885959], 偏差=[0.30238134]
第 51 步的 损失=0.0014583882875740528, 权重=[0.08891013], 偏差=[0.30237758]
第 52 步的 损失=0.0014576294925063848, 权重=[0.08919273], 偏差=[0.30237415]
第 53 步的 损失=0.0014570162165910006, 权重=[0.0894469], 偏差=[0.302371]
第 54 步的 损失=0.0014565197052434087, 权重=[0.0896755], 偏差=[0.3023681]
第 55 步的 损失=0.0014561181887984276, 权重=[0.0898811], 偏差=[0.30236548]
第 56 步的 损失=0.0014557933900505304, 权重=[0.09006602], 偏差=[0.3023631]
第 57 步的 损失=0.001455530640669167, 权重=[0.09023233], 偏差=[0.30236092]
第 58 步的 损失=0.0014553182991221547, 权重=[0.09038191], 偏差=[0.30235896]
第 59 步的 损失=0.0014551462372764945, 权重=[0.09051643], 偏差=[0.30235717]
第 60 步的 损失=0.0014550070045515895, 权重=[0.09063742], 偏差=[0.30235556]
第 61 步的 损失=0.0014548946637660265, 权重=[0.09074625], 偏差=[0.3023541]
第 62 步的 损失=0.0014548037433996797, 权重=[0.09084412], 偏差=[0.30235276]
第 63 步的 损失=0.0014547302853316069, 权重=[0.09093214], 偏差=[0.30235156]
第 64 步的 损失=0.0014546705642715096, 权重=[0.09101131], 偏差=[0.3023505]
第 65 步的 损失=0.001454622601158917, 权重=[0.09108251], 偏差=[0.3023495]
第 66 步的 损失=0.0014545833691954613, 权重=[0.09114655], 偏差=[0.3023486]
第 67 步的 损失=0.001454551937058568, 权重=[0.09120415], 偏差=[0.3023478]
第 68 步的 损失=0.0014545266749337316, 权重=[0.09125596], 偏差=[0.3023471]
第 69 步的 损失=0.0014545059530064464, 权重=[0.09130254], 偏差=[0.30234644]
第 70 步的 损失=0.001454489422030747, 权重=[0.09134445], 偏差=[0.30234584]
第 71 步的 损失=0.0014544756850227714, 权重=[0.09138213], 偏差=[0.3023453]
第 72 步的 损失=0.0014544647419825196, 权重=[0.09141602], 偏差=[0.30234483]
第 73 步的 损失=0.0014544560108333826, 权重=[0.09144651], 偏差=[0.3023444]
第 74 步的 损失=0.0014544487930834293, 权重=[0.09147393], 偏差=[0.30234402]
第 75 步的 损失=0.0014544432051479816, 权重=[0.09149859], 偏差=[0.3023437]
第 76 步的 损失=0.001454438315704465, 权重=[0.09152077], 偏差=[0.3023434]
第 77 步的 损失=0.0014544345904141665, 权重=[0.09154072], 偏差=[0.30234313]
第 78 步的 损失=0.0014544314472004771, 权重=[0.09155866], 偏差=[0.30234286]
第 79 步的 损失=0.0014544292353093624, 权重=[0.0915748], 偏差=[0.30234262]
第 80 步的 损失=0.0014544271398335695, 权重=[0.09158931], 偏差=[0.3023424]
第 81 步的 损失=0.0014544252771884203, 权重=[0.09160236], 偏差=[0.30234224]
第 82 步的 损失=0.001454424113035202, 权重=[0.0916141], 偏差=[0.3023421]
第 83 步的 损失=0.0014544231817126274, 权重=[0.09162466], 偏差=[0.30234194]
第 84 步的 损失=0.001454422133974731, 权重=[0.09163415], 偏差=[0.3023418]
第 85 步的 损失=0.0014544215518981218, 权重=[0.09164269], 偏差=[0.30234167]
第 86 步的 损失=0.0014544209698215127, 权重=[0.09165037], 偏差=[0.30234155]
第 87 步的 损失=0.0014544205041602254, 权重=[0.09165728], 偏差=[0.30234146]
第 88 步的 损失=0.0014544199220836163, 权重=[0.09166349], 偏差=[0.30234137]
第 89 步的 损失=0.0014544199220836163, 权重=[0.09166908], 偏差=[0.30234128]
第 90 步的 损失=0.0014544193400070071, 权重=[0.09167411], 偏差=[0.30234122]
第 91 步的 损失=0.0014544193400070071, 权重=[0.09167863], 偏差=[0.30234116]
第 92 步的 损失=0.0014544192235916853, 权重=[0.0916827], 偏差=[0.3023411]
第 93 步的 损失=0.0014544188743457198, 权重=[0.09168636], 偏差=[0.30234104]
第 94 步的 损失=0.0014544188743457198, 权重=[0.09168965], 偏差=[0.302341]
第 95 步的 损失=0.0014544188743457198, 权重=[0.0916926], 偏差=[0.30234098]
第 96 步的 损失=0.0014544188743457198, 权重=[0.09169526], 偏差=[0.30234095]
第 97 步的 损失=0.001454418757930398, 权重=[0.09169766], 偏差=[0.30234092]
第 98 步的 损失=0.001454418757930398, 权重=[0.09169981], 偏差=[0.3023409]
第 99 步的 损失=0.0014544186415150762, 权重=[0.09170175], 偏差=[0.30234087]
[0.09170175]
</pre>
image.png

相关文章

网友评论

    本文标题:tensorflow基础概念

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