如何使用tensorflow搭建简单线性模拟

本文将带来tensorflow中文文档入门前的一个小例子讲解使用tensorflow搭建简单线性模拟器:

地址:http://www.tensorfly.cn/tfdoc/get_started/introduction.html

声明:对于入门而言的一篇简单讲解,高手轻拍

这段很短的 Python 程序生成了一些三维数据, 然后用一个平面拟合它.

主要内容包括:

1.如何使用Variable()变量构造一个线性模型(值得一提的是:对于初次使用tensorflow的新手来说,Variable()变量与平常的变量大不相同,后面解释)

2.如何为损失函数选择优化函数(本文将初步讲解,优化器是深度学习必不可少的)

3.使用Session()类去拟合平面,也就是学习训练过程(Session()是tensorflow运行模型的独特环境)

一、先上大框架和源码

在深度学习里面,有各种各样的模型,比如单一的cnn,lstm复杂点的VGG,AlexNet,FCN,以及组合型的convlstm等

所谓万丈高楼平地起,简单的来讲,在tensorflow中这些模型的搭建还是有相似的地方,相似的地方在于一些大的步骤,比如上面提到的主要内容,也就是说tensorflow使用大致步骤流程去解决问题,这也是非常流行的一个原因。

步骤比如:

1.读取并处理数据

2.构造一个线性模型

3.设置损失函数,选择优化器

4.启动图也就是tensorflow中特有的Session()类

5.拟合平面,进行学习训练

好了完整的代码贴上:

 

'''
初用tensorflow生成了一些三维数据, 然后用一个平面拟合它
'''
import tensorflow as tf
import numpy as np

# 使用 NumPy 生成假数据(phony data), 总共 100 个点
x_data=np.float32(np.random.rand(2,100))
y_data=np.dot([0.10,0.20],x_data)+0.3

# 构造一个线性模型
b=tf.Variable(tf.zeros([1]))
w=tf.Variable(tf.random_uniform([1,2],-1.0,1.0))
y=tf.matmul(w,x_data)+b  #相当于计算了一个函数y=w*x+b
# 最小化方差
loss=tf.reduce_mean(tf.square(y-y_data)) #设定目标函数或优化函数或损失函数或成本函数
optimizer=tf.train.AdadeltaOptimizer(0.5)
train=optimizer.minimize(loss)

# 初始化变量
#init=tf.initialize_all_variables()
init=tf.global_variables_initializer()
# 启动图 (graph)
sess=tf.Session()
sess.run(init)
#with tf.Session() as sess:
#    sess.run(init)
    
#拟合平面(用session运行train)
for epoch in range(0,201):  #
    sess.run(train)
    if epoch % 20==0:
        print (epoch,sess,sess.run(w),sess.run(b)) #为何将w,及b 作为运行变量呢?
# 拟合平面

二、主要内容讲解

1.如何使用Variable()变量构造一个线性模型

首先构造数据

# 使用 NumPy 生成假数据(phony data), 总共 100 个点
x_data=np.float32(np.random.rand(2,100))
y_data=np.dot([0.10,0.20],x_data)+0.3

然后使用Variable()模拟线性其

b=tf.Variable(tf.zeros([1]))
w=tf.Variable(tf.random_uniform([1,2],-1.0,1.0))
y=tf.matmul(w,x_data)+b  #相当于计算了一个函数y=w*x+b

知识点讲解:

1.Variable():

即TensorFlow中的图变量,跟我们平时所接触的一般变量在用法上有很大的差异。我们通过tf.Variable构造一个variable添加进图中,Variable()构造函数需要变量的初始值(是一个任意类型、任意形状的tensor),这个初始值指定variable的类型和形状。而不能直接进行运算,这也是深度学习的一个规则吧,你只能使用他们设定好的框架去使用,详细请参考如下博文:
原文:https://blog.csdn.net/abc13526222160/article/details/84860700 
2.matmul():

这个函数是进行矩阵乘法运算,返回值是一个矩阵

2.如何为损失函数选择优化函数

# 最小化方差
loss=tf.reduce_mean(tf.square(y-y_data)) #设定目标函数或优化函数或损失函数或成本函数
optimizer=tf.train.AdadeltaOptimizer(0.5)  #选择了Adadelta优化器
train=optimizer.minimize(loss)        #优化器目的是最小化损失函数loss

常见的优化器是随机梯度优化

知识点讲解:

1.随机梯度优化tf.train.GradientDescentOptimizer()是默认提供常量学习速率,所以当你需要变学习速率时,可以选择其他的AdaGrad,Adam,NLG等

2.优化器常常和损失函数,学习速率,随机梯度优化算法联系在一起,这些都为后面的模型训练train做好准备。

3.AdaGrad或自适应梯度允许学习速率根据参数进行调整。它对不频繁的参数执行更大的更新,对频繁的参数执行更小的更新。正因为如此,它非常适合稀疏数据(NLP或图像识别)。另一个优点是它基本上不需要调整学习速度。每个参数都有其自己的学习速率,并且由于算法的特性,学习速率是单调递减的。这导致了最大的问题:在某个时间点,学习率很低,系统停止学习

详细参考如下博文:

https://vimsky.com/article/3788.html

https://blog.csdn.net/shenxiaoming77/article/details/77169756/

https://www.jianshu.com/p/e6e8aa3169ca

tf.train.GradientDescentOptimizer(0.5)

3.使用Session()类去拟合平面,也就是学习训练过程

# 初始化变量
#init=tf.initialize_all_variables()
init=tf.global_variables_initializer()
# 启动图 (graph)
sess=tf.Session()
sess.run(init)
#with tf.Session() as sess:
#    sess.run(init)
    
#拟合平面(用session运行train)
for epoch in range(0,201):  #设置迭代次数epoch
    sess.run(train)
    if epoch % 20==0:
        print (epoch,sess,sess.run(w),sess.run(b))

知识点讲解:

1.Session是一个类,tensorflow中必不可少的一部分,主要是运行计算,比如你搭建好的train

官方解释:class tf.Session

A class for running TensorFlow operations. 
运行Tensorflow操作的类

比如:你要计算两个数相乘a*b=c;其中a=5,n=6;

在tensorflow中你需要进行如下操作:

# 创建一个图(tensorflow中将数据和其运算关系合称为图,即数据流图).
a = tf.constant(5.0)
b = tf.constant(6.0)
c = a * b

#在Session环境中启动图.
sess = tf.Session()

# 计算张量 `c`.(张量:简单介绍一下:一个数称为零维张量,一个向量称为一维张量,矩阵称为二维张量以此类推。。。)
print sess.run(c)
2.新手还需要epoch和batch-size的区别

简单说:epoch是迭代次数,即你的数据将被“轮”多少次,而batch-size是将你的数据分为几部分喂入模型当中,本文例子没有涉及,主要是数据量不大
 

最后:将陆续总结cnn,lstm,vgg,fcn,及组合模型convlstm等,欢迎交流

参考:https://blog.csdn.net/qq_34392093/article/details/78858409 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值