TensorFlow线性回归与逻辑回归实战

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

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20190202G0GSFQ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券