TensorFlow线性回归与逻辑回归实战
议程
Review
Linear regression on birth/life data
Control Flow
tf.data
Optimizers, gradients
Logistic regression on MNIST
Loss functions
一、TensorFlow线性回归
回顾
计算图
TensorFlow将计算的定义与其执行分开
阶段1:组装图表
阶段2:使用会话在图中执行操作。
TensorBoard
tf.constant and tf.Variable
常量值存储在图形定义中
会话分配内存来存储变量值
tf.placeholder and feed_dict
使用字典(feed_dict)将值提供给占位符
易于使用但性能不佳
避免懒加载
分离图形的组合和执行操作
使用Python属性确保函数仅在第一次调用时加载
在TensorFlow中的线性回归
数据与模型概要
建模之间的线性关系:
因变量Y.
解释变量X.
世界发展指标数据集
X: 出生率
Y: 预期寿命
190 国家
想要:找到X和Y之间的线性关系,从X预测Y.
模型:参考:
均方误差:
所需数据与代码:
阶段1:组装我们的图表
第一步:读数据
第一种方式读取(官方)
输出:
输出:
第二种方式读取
输出:
第2步:为输入和标签创建占位符
第3步:创建权重和偏置
第4步:预测
第5步:指定损失函数
第6步:创建优化器
阶段2:训练我们的模型
第7步:初始化及TensorBoard
第8步:训练模型100个epochs
输出:
第9步:输出w和b的值
输出:
第10步:输出耗时
输出:
第11步:可视化
输出
Huber loss
Huber loss是为了增强平方误差损失函数(squared loss function)对噪声(或叫离群点,outliers)的鲁棒性提出的。
对异常值的鲁棒性,如果预测值和实际值之间的差异很小,则将其平方;如果它很大,取其绝对值。
定义:
控制流程
在TensorFlow中,tf.cond()类似于c语言中的if…else…,用来控制数据流向,但是仅仅类似而已,其中差别还是挺大的。
格式:
tf.data
在上面的代码我曾经使用过数据placeholder。但是占位符是一种古老的方式,关于这种方法有各种各样的意见。看来有利于的是,它是一个点,缺点在于它可以很容易地处理数据外的TF较慢处理应被视为一个单独的线程中的数据,和数据瓶颈。因此,这个问题得以解决tf.data。
如何使用tf.data?
和必须是Tensor数据类型。但是,由于张量数据类型与numpy数据类型相同,因此可以包含numpy数据类型。
输出:
tf.data.Dataset有几种方法,你可以直接读取数据文件Tensorflow文件格式分析器。
将文件的每一行读作一个数据。它主要用于读取csv文件和机器翻译领域。
它主要用于固定长度数据。数据作为一个数据被接收预定长度。经常使用的地方也经常用于由固定长度组成的数据中。例如,它用于读取诸如CIFAR数据或ImageNet数据之类的内容。
用于tfrecord格式的数据。
我看到了如何读取数据。现在让我们看一下使用数据。在现有代码中,我们for通过语句逐个使用数据的值。使得逐个使用数据变得更加容易。
tf.data.Iterator
通过数据集只迭代一次。无需初始化。
根据需要迭代数据集。需要初始化每个epoch。
处理TensorFlow中的数据
我们应该使用tf.data?
对于原型设计,feed dict可以更快更容易编写(pythonic)
当您有复杂的预处理或多个数据源时,tf.data很难使用
NLP数据通常只是一个整数序列。在这种情况下,将数据传输到GPU非常快,因此tf.data的加速并不是那么大
优化
使用优化器非常简单。然而只有几行代码可以方便地使用(差分,更新)复杂的配置的优化器。
会话查看损失所依赖的所有可训练变量并更新它们
优化程序会自动计算和更新衍生值。因此,它适用于所有相关变量。在某些情况下,可能存在不应更新的变量。在这种变量的情况下,通过仅将其指定为选项,可以很容易地将其设置为不训练
除了上面使用的GD opmizer之外,还提供了各种其他优化器作为张量流函数。以下是优化器列表。
tf.train.Optimizer
tf.train.GradientDescentOptimizer
tf.train.AdadeltaOptimizer
tf.train.AdagradOptimizer
tf.train.AdagradDAOptimizer
tf.train.MomentumOptimizer
tf.train.AdamOptimizer
tf.train.FtrlOptimizer
tf.train.ProximalGradientDescentOptimizer
tf.train.ProximalAdagradOptimizer
tf.train.RMSPropOptimizer
二、TensorFlow逻辑回归
数据集:MNIST Database
每个图像都是一个28x28阵列,被展平为1-d张量,大小为784
X: 手写数字图像
Y: 数字值
任务:识别图中的数字
模型:Y_predicted = softmax(X * w + b)
损失函数(交叉熵损失): -log(Y_predicted)
1.处理数据
2.创建一个迭代器并确定如何初始化它。
3.并生成模型的参数w和b。设置形状以适合img大小。然后,w被初始化为具有均值0和标准差方差0.01的正态分布,并且b被初始化为0。
4.定义logit和softmax函数并定义损失函数。
5.优化器使用Adam优化器。
6.定义预测操作,确认预测是否正确,以及精度计算操作。
7.现在让我们可视化及定义session内容。
输出:
写在最后
直通车:
https://github.com/Light-City/Translating_documents
领取专属 10元无门槛券
私享最新 技术干货