tensorflow学习
来源:互联网 发布:vue.js 实现网页下载 编辑:程序博客网 时间:2024/06/05 19:37
第三章 tensorflow入门
import tensorflow as tf
3.1 tensorflow计算模型——计算图
a=tf.constant([1.0,2.0],name="a")b=tf.constant([2.0,3.0],name="b")result=a+btf.get_default_graph()#获取当前默认的计算图g1=tf.Graph()#生成新的计算图with g1.as_default(): #在计算图g1中定义变量"v",并设置初始值为0 v=tf.get_variable( "v",nitializer=tf.zros_initializer(shape=[1]))
不同计算图上的张量和运算都不会共享.
tensorflow 的计算图不仅仅可以用来隔离张量和计算,它还提供了管理张量和计算的机制。
tf.Graph.device('/gpu:0')#制定运行计算的设备
有效地整理tensorflow程序中的资源也是计算图的重要功能。。在一个计算图中可以使用集合来管理不同个类别的资源。tf.add_collection()将资源加入到一个或多个集合,tf.get_collection()获取一个集合里面的所有资源。这里的资源可以是张量、变量或者运行tensorflow程序所需要的队列资源。
为了方便,tensorflow也自动管理了一些最常用的集合。
3.2 tensorflow数据模型——张量
零阶张量是标量,一阶张量是向量,n阶张量是n维数组。但是张量在Tensorflow 中的实现并不是直接采用数组的形式,只是对tensorflow中运算结果的引用。在张量中并没有真正保存数字,而是保存的如何得到这些数字的过程。一个张量中主要保存了三个属性:name,shape,type
tensorflow支持十四种不同的类型,实数tf.float32,tf.float64,整数tf.int8,tf.int16,tf.int32,tf.int64,tf.uint8,布尔tf.bool,复数tf.complex64,tf.complex128
张量的使用主要可以总结为两大类:
对中间计算结果的引用。
计算图构造完成后,张量可以用来获得计算结果。tf.Session.run(result)
3.3 tensorfow运行模型——会话
使用会话的模式:
明确调用会话生成函数和会话关闭函数。
sess=tf.Session()sess.run(..)sess.close()
缺点:当程序因为异常而退出时,关闭会话的函数可能就不会被执行从而导致资源泄露。为了解决退出时资源释放的问题,可以通过python 上下文管理器来使用会话。
with tf.Session() as sess: sess.run(..)#当上下文退出时,会话关闭 和资源释放也就自动完成了
sess=tf.Session()(1)with sess.as_default():#手动指定默认的会话,可以通过eval还是哪壶来计算一个张量的值 print (result.eval())(2)print result.eval(session=sess)print sess.run(result)
交互式环境下直接构建默认会话的函数。
tf.InteractiveSession()自动将生成的会话注册为默认会话。
无论使用那种方式都可以通过configproto protocol buffer来配置需要生成的会话:
config=tf.ConfigProto(allow_soft_placement=True,log_device_placement=True)sess1=tf.InteractiveSession(config=config)sess2=tf.Session(config=config)
tensorflow实现神经网络
第四章 深层神经网络
4.1 深度学习与深层神经网络
4.1.1 线性模型的局限性
只通过线性变换,任意层的全连接神经网络和单层的神经网络没有区别。
4.1.2 激活函数实现去线性化
tf.nn.relu
tf.nn.sigmoid
tf.nn.tanh
…
4.1.3 多层神经网络解决异或问题
4.2 损失函数
4.2.1 经典损失函数
分类问题
- 交叉熵
多分类问题如何判断一个输出向量和期望的向量有多接近?
期望的输出[0,0,1,0,0]
交叉熵:刻画两个概率分布之间的距离。给定两个概率分布p\q。H(p,q)=−∑xp(x)logq(x)
含义:通过q来表达p的困难程度。所以p代表期望,q代表预测。 交叉熵越小,两个概率分布越接近。
如何得到预测的概率分布:softmax函数,把输出层变成一个概率分布。
例如:H((1,0,0),(0.5,0.4,0.1))=−(1∗log0.5+0∗log0.4+0∗log0.1)=0.3
cross_entropy=-tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1.0)
y_代表真实值,y代表预测值。tf.clip_by_value可以将一个张量中的数值限制在一个范围内,避免一些运算错误,比如log0是无效的。
*代表元素对应相乘。tf.matmul代表矩阵乘法。
cross_entropy=tf.nn.softmax_cross_entropy_with_logits(y,y_)#因为交叉熵一般和softmax一起使用,所以进行了封装
回归问题
- MSE
mse=tf.reduce_mean(tf.square(y-y_))
4.2.2 自定义损失函数
结合实际需要自定义损失函数。
例如:Loss(y,y__)= \sum_(i=1)f(y_i,y__)
loss=tf.reduce_sum(tf.select(tf.greater(v1,v2),(v1-v2)*a,(v2-v1)*b))#tf.greater()比较两个张量中的每一个元素的大小#tf.select()三个参数,第一个为条件判断,true选择第二个参数,否则选择第三个参数。都是在元素级别上判断的。
4.3 神经网络优化算法
反向传播
梯度下降
4.4 神经网络的进一步优化
4.4.1 学习率的设置
- 指数衰减法tf.train.exponential_decay
该函数实现了一下功能:
decayd_learning_rate=learning_rate*decay_rate^(global_step/decay_steps)
learning_rate=tf.train.exponential_decay(初始学习速率,global_step,decays_step,decay_rate,staircase=True)#每decays_step学习率乘以decay_rate#staircase=True 阶梯状下降#staircase=False 连续衰减
4.4.2 过拟合问题
无论哪一张正则化方式,基本的思想都是希望通过限制权重的大小,使得模型不能任意拟合训练数据中的噪音。但这两种正则化的方法也有很大区别。首先L1会让参数变得更稀疏,L2不会。所谓变的稀疏是指会有更多的参数变为0,这样可以达到类似特征选取的功能。之所以L2不会变的稀疏的原因是当参数很小时,比如0.001,这个参数的平方基本可以忽略,于是不会进一步调整为0。L1不可导。
tf.contrib.layers.l2_regularizer(lambda)(w)tf.contrib.layers.l1_regularizer(lambda)(w)
4.2.3 滑动平均模型:使模型在未知数据上更加健壮
tf.train.ExponentialMovingAverage
初始化ExponentialMovingAverage时,需要提供一个衰减速率,这个衰减率用于控制模型的更新速度。ExponentialMovingAverage对每一个变量都会维护一个影子变量,这个影子变量的初始值就是相应变量的初始值,而每次运行变量更新时,应自变量的值都会更新:
shadow_variable=decay*shadow_variable+(1-decay)*variable
还提供了num_updates参数来动态设置decay的大小。如果提供了这个参数,那么decay=min{decay,1+num_updates/10+num_updates}
第五章 MNIST数字识别问题
- TensorFlow 学习
- Tensorflow学习
- 学习tensorflow
- Tensorflow学习
- TensorFlow 学习
- TensorFlow 学习
- TensorFlow 学习
- TensorFlow 学习
- TensorFlow学习
- Tensorflow学习
- tensorflow学习
- tensorflow学习
- tensorflow学习
- TensorFlow 学习
- TensorFlow学习1--TensorFlow基本概念
- [TensorFlow] TensorFlow学习的方向
- TensorFlow学习笔记-1
- TensorFlow学习总结
- CSS实现单行、多行文本溢出显示省略号(…)
- 用GridView来显示文件链接
- selenium学习---1
- web.xml配置详解
- Kotlin学习(7)高阶函数和函数类型
- tensorflow学习
- 标准库中的集合与映射
- 关于国密算法 SM1,SM2,SM3,SM4 的笔记
- eclipse导入Java web项目,项目名出现红叉而其他地方没有红叉的问题解决方法
- 汉诺塔(递归实现与非递归实现)
- scala 隐式转换,隐式参数,隐式类
- Debian(Ubuntu)中添加快捷方式到“应用程序”
- EF之左外链接
- 【LeetCode】算法题66 Plus One