问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

tensorflow的各种优化算法怎么实现的

发布网友 发布时间:2022-04-21 18:08

我来回答

2个回答

懂视网 时间:2022-04-18 09:50

这篇文章主要介绍了关于用TensorFlow实现戴明回归算法的示例,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

如果最小二乘线性回归算法最小化到回归直线的竖直距离(即,平行于y轴方向),则戴明回归最小化到回归直线的总距离(即,垂直于回归直线)。其最小化x值和y值两个方向的误差,具体的对比图如下图。


线性回归算法和戴明回归算法的区别。左边的线性回归最小化到回归直线的竖直距离;右边的戴明回归最小化到回归直线的总距离。

线性回归算法的损失函数最小化竖直距离;而这里需要最小化总距离。给定直线的斜率和截距,则求解一个点到直线的垂直距离有已知的几何公式。代入几何公式并使TensorFlow最小化距离。

损失函数是由分子和分母组成的几何公式。给定直线y=mx+b,点(x0,y0),则求两者间的距离的公式为:

# 戴明回归
#----------------------------------
#
# This function shows how to use TensorFlow to
# solve linear Deming regression.
# y = Ax + b
#
# We will use the iris data, specifically:
# y = Sepal Length
# x = Petal Width

import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
from sklearn import datasets
from tensorflow.python.framework import ops
ops.reset_default_graph()

# Create graph
sess = tf.Session()

# Load the data
# iris.data = [(Sepal Length, Sepal Width, Petal Length, Petal Width)]
iris = datasets.load_iris()
x_vals = np.array([x[3] for x in iris.data])
y_vals = np.array([y[0] for y in iris.data])

# Declare batch size
batch_size = 50

# Initialize placeholders
x_data = tf.placeholder(shape=[None, 1], dtype=tf.float32)
y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)

# Create variables for linear regression
A = tf.Variable(tf.random_normal(shape=[1,1]))
b = tf.Variable(tf.random_normal(shape=[1,1]))

# Declare model operations
model_output = tf.add(tf.matmul(x_data, A), b)

# Declare Demming loss function
demming_numerator = tf.abs(tf.subtract(y_target, tf.add(tf.matmul(x_data, A), b)))
demming_denominator = tf.sqrt(tf.add(tf.square(A),1))
loss = tf.reduce_mean(tf.truep(demming_numerator, demming_denominator))

# Declare optimizer
my_opt = tf.train.GradientDescentOptimizer(0.1)
train_step = my_opt.minimize(loss)

# Initialize variables
init = tf.global_variables_initializer()
sess.run(init)

# Training loop
loss_vec = []
for i in range(250):
 rand_index = np.random.choice(len(x_vals), size=batch_size)
 rand_x = np.transpose([x_vals[rand_index]])
 rand_y = np.transpose([y_vals[rand_index]])
 sess.run(train_step, feed_dict={x_data: rand_x, y_target: rand_y})
 temp_loss = sess.run(loss, feed_dict={x_data: rand_x, y_target: rand_y})
 loss_vec.append(temp_loss)
 if (i+1)%50==0:
 print('Step #' + str(i+1) + ' A = ' + str(sess.run(A)) + ' b = ' + str(sess.run(b)))
 print('Loss = ' + str(temp_loss))

# Get the optimal coefficients
[slope] = sess.run(A)
[y_intercept] = sess.run(b)

# Get best fit line
best_fit = []
for i in x_vals:
 best_fit.append(slope*i+y_intercept)

# Plot the result
plt.plot(x_vals, y_vals, 'o', label='Data Points')
plt.plot(x_vals, best_fit, 'r-', label='Best fit line', linewidth=3)
plt.legend(loc='upper left')
plt.title('Sepal Length vs Pedal Width')
plt.xlabel('Pedal Width')
plt.ylabel('Sepal Length')
plt.show()

# Plot loss over time
plt.plot(loss_vec, 'k-')
plt.title('L2 Loss per Generation')
plt.xlabel('Generation')
plt.ylabel('L2 Loss')
plt.show()

结果:



本文的戴明回归算法与线性回归算法得到的结果基本一致。两者之间的关键不同点在于预测值与数据点间的损失函数度量:线性回归算法的损失函数是竖直距离损失;而戴明回归算法是垂直距离损失(到x轴和y轴的总距离损失)。

注意,这里戴明回归算法的实现类型是总体回归(总的最小二乘法误差)。总体回归算法是假设x值和y值的误差是相似的。我们也可以根据不同的理念使用不同的误差来扩展x轴和y轴的距离计算。

热心网友 时间:2022-04-18 06:58

如何高效的学习TensorFlow代码?目前TensorFlow代码已超过40w行,从代码量上来看,绝不是一个能够迅速上手的小项目。所以,想要精通TensorFlow的同学需要做好心理准备。对于想要学习TensorFlow(以下简称TF)的人,根据目的不同,可以简单分为以下2类:1.研究学者,仅仅需要TF这个平台实现深度学习算法,无需了解太多底层原理2.好学的行业内人员(比如我⊙﹏⊙),不仅需要了解算法模型,同时还要熟悉TF平台的原理。在算子、通信、模型优化等方面进行平台的二次开发的人。研究学者:你们可以考虑使用Keras,Python写的深度神经网络库,已经实现了绝大部分神经网络,如:RNN、GRU、LSTM,CNN,Pooling,Full-Connected,以及sigmoid、tanh、Relu、PRelu、SRelu等各种激活函数。并且采用TF/Theano作为后端计算引擎,自己本身拥有一套更高层的API,可以同时跑在TF/Theano平台上。相对于TF来说,这个学习压力小了很多,我们公司负责算法的同事也是用Keras来写模型,然后我再用TF的API来实现分布式部署。附:开发人员:对于我们这类人来说,首先需要弄清平台的很多名称、概念、定义,@贾扬清曾说过TF有太多的Abstraction需要学习。诚然,这加大了我们的学习难度。但是,这也说明Google是想要把这个平台做大做强的,所以才会花时间去设计这一套框架和统一的结构。特别是读了部分源码后,更有这种感触。那么,具体要怎么开始呢?极客学院有翻译部分TF的官方文档,对于初步了解Tensor、DAG、Operator、Variable、Device、Optimizer等是帮助的。在看完这些概念后,有一个MNIST的例子程序作为TF的入门。这个样例用一个简单的Softmax实现了手写体数字识别的神经网络,只有一层参数。同时还介绍了Session、tf.placeholder、图的计算等重要概念。在看完这个样例后,如果理解了DAG和Session,可以继续看用卷积神经网络实现的MNIST,准确率上升到了99%,相对于单层Softmax的92%左右,已经接近目前最高的准确率了。TFv0.8发布了分布式模型,我也研究了将近1个月,才把Seq2seq机器翻译改造成了分布式,但是现在公司不让发布出来ORZ。好消息是,我改写了社区的MNIST分布式程序,并且已经合并到master分支了。所以,如果想要继续学习分布式的话,我建议可以看一下那份代码。比较遗憾的是,极客学院目前没有翻译分布式的教程,所以大家得移步TF官网(貌似被墙了)。由于分布式的资料较少,我这里简单梳理下概念,大家在官网会看到他们的定义:TF采用了PS/Worker的结构来定义集群,其中PS(parameterserver):存储variable(模型参数),主要负责参数更新和发放;Worker:存储operator,主要负责图计算和梯度计算(TF使用Optimizer实现了自动化的梯度计算);job:由于工作类型不同,用job_name来区分ps和workertask:对于每个worker来说,具体做什么任务(算什么图)也有可能不同,用task_index区分device:指具体的CPU/GPU,通常PS绑定到CPU上,Worker绑定到GPU上,各取所长。syncReplicaOptimizer:同步优化器,其本质仍然是用普通优化器进行梯度计算,但是通过Queue机制和Coordinator多线程协同实现了所有worker的梯度汇总和平均,最终将梯度传回PS进行参数更新。以上几个概念对于分布式的理解非常重要。当然,想要完全弄懂,还得不断的看文档和源码。源码我推荐几个python目录下非常值得看的基础类定义:framework/Ops.py:定义了Tensor、Graph、Opreator类等Ops/Variables.py:定义了Variable类
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
厂口银杏园地址在哪里? 昆明银杏大道在什么地方 昆明哪些地方有银杏树 从二月河“帝王三部曲”看90年代的文学场(一) 二月河《落霞三部曲》读书札记 安装织梦CMS到新浪SAE,这数据库主机,用户都是什么?这个是安装在新浪SE... SAE上的mySql初始化了怎么用啊,java怎么连上去啊,地址,端口号,账号... 金鱼尾部出现血丝,怎么办? 金鱼尾鳍上有血丝,急躁不安是什么病 请问?家里养的金鱼,一夜过来,金鱼尾巴上面都有红色血丝是怎么回事... tensorflow 是分布式么 2020年中国时政热点词汇有哪些? 最近发生的时政新闻有哪些 求最近的时政热点及相关政治知识 2020年1月至今国内都有哪些时政热点? 2020年国外政治新闻摘抄30条简短? 求20条简短的新闻! 2020十个时政热点及评析是什么? 2020年重大时政热点有哪些? 12315投诉要不要绿色通道 想举报一家非法经营的公司,该怎么举报 怎么举报中国工商银行 12315小程序投诉多久受理 老妈用电脑不会拼音和打字,想用鼠标写。有什么办法? 现在做菜鸟驿站怎么样 以前按键手机有个游戏里面有投斧兵 全键盘智能手机 QWERTY全键盘手机有哪些 推荐款手写按键都有的老人智能手机,要简单易用的 现在全键盘智能手机哪个好 如何在AWS上安装使用分布式TensorFlow 如何高效的学习 TensorFlow 代码 TensorFlow怎样入门,怎样快速学习? 如何安装Spark amp;TensorflowOnSpark TensorFlow的优势和缺点有哪些 只有cpu是否可以进行分布式tensorflow 请问下tensorflow2.0没有placeholder了吗,为什么... 如何安装spark&tensorflowonspark tensorflow cnn搭建容易吗 为什么在部分机器学习中训练模型时使用GPU的效果比... 如何使用Keras进行分布式/多GPU运算 如何评价邢波老师实验室开发的深度学习平台Poseidon 怎么将WORD转换成ppt和PDF,又怎么将PPT和pdf转回... 如何把做好的图片或WOPD文字改成PDF格式? 如何在wps的pdf中从 wo'r'd转为dpf? woird转PDF用什么软件 word转pdf转换器发我邮箱 我的邮箱是wojiushiqiuzh... 什么软件可以把PDF转为WORW 为何用福昕浏览器将Word转换为PDF时显示该功能需要... 超过5页的PDF文件 超过5页的PDF文件,怎样才能免费...