tensorflow学习(tensorflow概念和用tensorflow拟合直线回归)
- 2019 年 10 月 6 日
- 筆記
tensorflow是什么?
尽管深度学习背后的数学概念已经出现几十年了,但是用于创建和训练这些深度模型的程序类库在最近几年才出现。不幸的是,大多数类库都会在灵活性和实际生产价值上做出权衡。易用性的类库对于科研是无比珍贵的,因为这样科技工作者们才更方便地研究出新的模型框架,但是,如果考虑到实际生产的话,它们往往训练又太慢而没有实际的应用价值。另一方面,快、高效的类库,部署到分布式硬件上是可行的,但是它们只针对具体的那些神经网络,对新发明的网络又不适用。
这就留给决策者们一个困惑: 要想不重复实现相同的代码,我们还依然要用不太灵活的类库做科研吗?还是,科研和生产各用自己的一套不相同的库?
假如,我们选择前者,我们也许不能测试各种不同种类的神经网络,如果选择了后者,我们必须维护不同的两套代码,我们能有足够的精力做这个吗?
TensorFlow 就是为了解决,新出现的神经网络架构如何真正能在生产环境下使用,这一使命而诞生的。
Tensor是什么?
在tensorFlow中使用tensor这种数据结构来表示所有的数据,所有的计算涉及到的数据都是tensor这种结构类型的。Tensorflow把tensorflow看做是一个n维的数组或者列表,tensor又叫做张量,tensor的维数又叫做阶,但是tensor的阶和矩阵的阶不是一个概念。
你可以认为一个二阶tensor就是我们平常说的矩阵,一阶tensor就是一个向量,二阶tensor可以用t[i,j]来描述,三阶tensor可以用t[i,j,k]来描述。
阶 |
数学实例 |
Python 例子 |
---|---|---|
0 |
纯量 (只有大小) |
s = 666 |
1 |
向量(大小和方向) |
v = [1.9, 2.5, 3.1] |
2 |
矩阵(数据表) |
m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] |
3 |
3阶张量 (数据立体) |
3阶张量 (数据立体) t = [[[1,2,3], [4,5,6], [6,7,8]], [[8.9.10], [10,11,12], [12,12,13]], [[14,15,16], [16,17,18], [18,19,20]]] |
n |
n阶 |
(自己想想看) |
如一个二阶tensort[2,1]的位置就是里面第二个元素中第一个位置4:

如一个三阶tensort[3,2,1]的位置就是里面第三个元素中第二个元素的第一个位置:

tensorflow的启动过程:
在tensorflow中,一个图是用来描述计算的过程的,图必须在会话session里面启动,程序的流程分为两步,第一步构建阶段,这个阶段就是专门构建一些计算的操作和数据的构建等,用op来描述,在数据和操作定义完之后就可以启动session来执行计算任务了
构建过程:
看下面的一些简单的代码(线性回归):
注:可以使用tf.constant()来定义常量
可以使用tf.Variable()来定义变量
#构建权重参数w w=tf.Variable(tf.random_uniform([1],-1.,1.,name='myw')) #构建偏置项 b=tf.Variable(tf.zeros(1),name='myb') #组合函数 y=w*x_data+b
构建会话Session:
#构建session sess = tf.Session() #初始话上面构建的数据的操作,w和b init = tf.global_variables_initializer() #初始话 sess.run(init)
在session中运行直接调用Session.run()函数就可以直接跑tensorflow程序了:
for step in range(20): sess.run(train) print("w=", sess.run(w),"b=",sess.run(b),sess.run(loss))
Tensorboard:
Tensorboard是一个可视化界面,这个界面展示了tensorflow程序中数据的流向和相关的计算操作。
writer = tf.summary.FileWriter("./mytmp",sess.graph)
这样在mytmp文件夹下,增加了一个event文件,
再在终端,输入 tensorboard.exe –logdir = 刚在生成的log文件夹的绝对路径,回车,这样服务端就启动了,
接下来,启动客户端,即浏览器,输入localhost:6006,端口是6006,选中graphs,得到如下的可视化图:

完整代码如下:
import numpy as np import tensorflow as tf import matplotlib.pyplot as plt num_points=100 vectors_set=[] for i in range(num_points): x1=np.random.normal(0.,0.55) y1=x1*0.1+0.3+np.random.normal(0.0,0.03) vectors_set.append([x1,y1]) x_data=[v[0] for v in vectors_set ] y_data=[v[1] for v in vectors_set] plt.scatter(x_data,y_data,c='r') plt.show() #构建线性回归的graph #构建权重参数w w=tf.Variable(tf.random_uniform([1],-1.,1.,name='myw')) #构建偏置项 b=tf.Variable(tf.zeros(1),name='myb') #组合函数 y=w*x_data+b loss=tf.reduce_mean(tf.square(y-y_data,name='mysquare'),name='myloss') optimizer=tf.train.GradientDescentOptimizer(0.5) train=optimizer.minimize(loss,name='mytrain') #global_variables_initializer初始化Variable等变量 #构建session sess = tf.Session() #初始话上面构建的数据的操作,w和b init = tf.global_variables_initializer() #初始话 sess.run(init) print("w=", sess.run(w),"b=",sess.run(b),sess.run(loss)) #迭代20次train for step in range(20): sess.run(train) print("w=", sess.run(w),"b=",sess.run(b),sess.run(loss)) #写入磁盘,提供tensorboard在浏览器中展示用 writer = tf.summary.FileWriter("./mytmp",sess.graph) plt.scatter(x_data,y_data,c='r') plt.plot(x_data,sess.run(w)*x_data+sess.run(b)) plt.show()
生成的随机数可视化图片和拟合函数的可视化图片:

