前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tensorflow学习(tensorflow概念和用tensorflow拟合直线回归)

tensorflow学习(tensorflow概念和用tensorflow拟合直线回归)

原创
作者头像
opprash
修改2019-09-20 18:12:04
6300
修改2019-09-20 18:12:04
举报

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[2,1]的值
tensort[2,1]的值

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

tensort[3,2,1]的值
tensort[3,2,1]的值

tensorflow的启动过程:

在tensorflow中,一个图是用来描述计算的过程的,图必须在会话session里面启动,程序的流程分为两步,第一步构建阶段,这个阶段就是专门构建一些计算的操作和数据的构建等,用op来描述,在数据和操作定义完之后就可以启动session来执行计算任务了

构建过程:

看下面的一些简单的代码(线性回归):

注:可以使用tf.constant()来定义常量

可以使用tf.Variable()来定义变量

代码语言:python
复制
#构建权重参数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:

代码语言:javascript
复制
#构建session
sess = tf.Session()
#初始话上面构建的数据的操作,w和b
init = tf.global_variables_initializer()
#初始话
sess.run(init)

在session中运行直接调用Session.run()函数就可以直接跑tensorflow程序了:

代码语言:javascript
复制
for step in range(20):
    sess.run(train)
    print("w=", sess.run(w),"b=",sess.run(b),sess.run(loss))

Tensorboard:

Tensorboard是一个可视化界面,这个界面展示了tensorflow程序中数据的流向和相关的计算操作。

代码语言:javascript
复制
writer = tf.summary.FileWriter("./mytmp",sess.graph)

这样在mytmp文件夹下,增加了一个event文件,

再在终端,输入 tensorboard.exe --logdir = 刚在生成的log文件夹的绝对路径,回车,这样服务端就启动了,

接下来,启动客户端,即浏览器,输入localhost:6006,端口是6006,选中graphs,得到如下的可视化图:

可视化图片
可视化图片

完整代码如下:

代码语言:python
复制
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()

生成的随机数可视化图片和拟合函数的可视化图片:

拟合数据
拟合数据
拟合直线
拟合直线

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • tensorflow是什么?
  • Tensor是什么?
  • tensorflow的启动过程:
  • 构建会话Session:
  • Tensorboard:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档