本文将带来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等,欢迎交流