2019独角兽企业重金招聘Python工程师标准>>>

本篇内容基于 Python3 TensorFlow 1.4 版本。

本节内容

本节通过最简单的示例 —— 平面拟合来说明 TensorFlow 的基本用法。

构造数据

TensorFlow 的引入方式是:

import tensorflow as tf

接下来我们构造一些随机的三维数据,然后用 TensorFlow 找到平面去拟合它,首先我们用 Numpy 生成随机三维点,其中变量 x 代表三维点的 (x, y) 坐标,是一个 2×100 的矩阵,即 100 个 (x, y),然后变量 y 代表三位点的 z 坐标,我们用 Numpy 来生成这些随机的点:


import numpy as np
x_data = np.float32(np.random.rand(2, 100))
y_data = np.dot([0.300, 0.200], x_data) + 0.400print(x_data)
print(y_data)

这里利用 Numpy 的 random 模块的 rand() 方法生成了 2×100 的随机矩阵,这样就生成了 100 个 (x, y) 坐标,然后用了一个 dot() 方法算了矩阵乘法,用了一个长度为 2 的向量跟此矩阵相乘,得到一个长度为 100 的向量,然后再加上一个常量,得到 z 坐标,输出结果样例如下:


[[ 0.97232962  0.08897641  0.54844421  0.5877986   0.5121088   0.647160590.22353953  0.18406206  0.16782761  0.97569454  0.65686035  0.755698680.35698661  0.43332314  0.41185728  0.24801297  0.50098598  0.120259580.40650111  0.51486945  0.19292323  0.03679928  0.56501174  0.53213340.71044683  0.00318134  0.76611853  0.42602748  0.33002195  0.044146720.73208278  0.62182301  0.49471655  0.8116194   0.86148429  0.488350480.69902027  0.14901569  0.18737803  0.66826463  0.43462989  0.357681510.79315376  0.0400687   0.76952982  0.12236254  0.61519378  0.927950620.84952474  0.16663995  0.13729768  0.50603199  0.38752931  0.395298570.29228279  0.09773371  0.43220878  0.2603009   0.14576958  0.218817250.64888018  0.41048348  0.27641159  0.61700606  0.49728736  0.759369130.04028837  0.88986284  0.84112513  0.34227493  0.69162005  0.890589890.39744586  0.85080278  0.37685293  0.80529863  0.31220895  0.505009770.95800418  0.43696108  0.04143282  0.05169986  0.33503434  0.16718180.10234453  0.31241918  0.23630807  0.37890589  0.63020509  0.781845510.87924582  0.99288088  0.30762389  0.43499199  0.53140771  0.434617910.23833922  0.08681628  0.74615192  0.25835371][ 0.8174957   0.26717573  0.23811154  0.02851068  0.9627012   0.368023960.50543582  0.29964805  0.44869211  0.23191817  0.77344608  0.366362990.56170034  0.37465382  0.00471885  0.19509546  0.49715847  0.152019070.5642485   0.70218688  0.6031307   0.4705168   0.98698962  0.8653670.36558965  0.72073907  0.83386165  0.29963031  0.72276717  0.981718540.30932376  0.52615297  0.35522953  0.13186514  0.73437029  0.038873780.1208882   0.67004597  0.83422536  0.17487818  0.71460873  0.519266610.55297899  0.78169805  0.77547258  0.92139858  0.25020468  0.709168550.68722379  0.75378138  0.30182058  0.91982585  0.93160367  0.815391840.87977934  0.07394848  0.1004181   0.48765802  0.73601437  0.598949430.34601998  0.69065076  0.6768015   0.98533565  0.83803362  0.471945520.84103006  0.84892255  0.04474261  0.02038293  0.50802571  0.151780650.86116213  0.51097614  0.44155359  0.67713588  0.66439205  0.678852260.4243969   0.35731083  0.07878648  0.53950399  0.84162414  0.244128450.61285144  0.00316137  0.67407191  0.83218956  0.94473189  0.098133530.16728765  0.95433819  0.1416636   0.4220584   0.35413414  0.559997440.94829601  0.62568033  0.89808714  0.07021013]]
[ 0.85519803  0.48012807  0.61215557  0.58204171  0.74617288  0.667752970.56814902  0.51514823  0.5400867   0.739092    0.75174732  0.69998220.61943605  0.60492771  0.52450095  0.51342299  0.64972749  0.466481690.63480003  0.69489821  0.57850311  0.50514314  0.76690145  0.732713420.68625198  0.54510222  0.79660789  0.58773431  0.64356002  0.609587730.68148959  0.6917775   0.61946087  0.66985885  0.80531934  0.55427990.63388372  0.5787139   0.62305848  0.63545502  0.67331071  0.611157770.74854193  0.56836022  0.78595346  0.62098848  0.63459907  0.82021890.79230218  0.60074826  0.50155342  0.73577477  0.70257953  0.681667940.6636407   0.44410981  0.54974625  0.57562188  0.59093375  0.585435060.66386805  0.6612752   0.61828378  0.78216895  0.71679293  0.722199850.58029252  0.83674336  0.66128606  0.50675907  0.70909116  0.69753310.69146618  0.75743606  0.6013666   0.77701676  0.6265411   0.687273380.77228063  0.60255049  0.42818714  0.52341076  0.66883513  0.498980230.55327365  0.49435803  0.6057068   0.68010968  0.77800791  0.654180360.69723127  0.8887319   0.52061989  0.61490928  0.63024914  0.642384860.66116097  0.55118095  0.80346301  0.49154814]

这样我们就得到了一些三维的点。

构造模型

随后我们用 TensorFlow 来根据这些数据拟合一个平面,拟合的过程实际上就是寻找 (x, y) 和 z 的关系,即变量 x_data 和变量 y_data 的关系,而它们之间的关系刚才我们用了线性变换表示出来了,即 z = w * (x, y) + b,所以拟合的过程实际上就是找 w 和 b 的过程,所以这里我们就首先像设变量一样来设两个变量 w 和 b,代码如下:


x = tf.placeholder(tf.float32, [2, 100])
y_label = tf.placeholder(tf.float32, [100])
b = tf.Variable(tf.zeros([1]))
w = tf.Variable(tf.random_uniform([2], -1.0, 1.0))
y = tf.matmul(tf.reshape(w, [1, 2]), x) + b

在创建模型的时候,我们首先可以将现有的变量来表示出来,用 placeholder() 方法声明即可,一会我们在运行的时候传递给它真实的数据就好,第一个参数是数据类型,第二个参数是形状,因为 x_data 是 2×100 的矩阵,所以这里形状定义为 [2, 100],而 y_data 是长度为 100 的向量,所以这里形状定义为 [100],当然此处使用元组定义也可以,不过要写成 (100, )。

随后我们用 Variable 初始化了 TensorFlow 中的变量,b 初始化为一个常量,w 是一个随机初始化的 1×2 的向量,范围在 -1 和 1 之间,然后 y 再用 w、x、b 表示出来,其中 matmul() 方法就是 TensorFlow 中提供的矩阵乘法,类似 Numpy 的 dot() 方法。不过不同的是 matmul() 不支持向量和矩阵相乘,即不能 BroadCast,所以在这里做乘法前需要先调用 reshape() 一下转成 1×2 的标准矩阵,最后将结果表示为 y。

这样我们就构造出来了一个线性模型。

这里的 y 是我们模型中输出的值,而真实的数据却是我们输入的 y_data,即 y_label。

损失函数

要拟合这个平面的话,我们需要减小 y_label 和 y 的差距就好了,这个差距越小越好。

所以接下来我们可以定义一个损失函数,来代表模型实际输出值和真实值之间的差距,我们的目的就是来减小这个损失,代码实现如下:

loss = tf.reduce_mean(tf.square(y - y_label))

这里调用了 square() 方法,传入 y_label 和 y 的差来求得平方和,然后使用 reduce_mean() 方法得到这个值的平均值,这就是现在模型的损失值,我们的目的就是减小这个损失值,所以接下来我们使用梯度下降的方法来减小这个损失值即可,定义如下代码:

optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)

这里定义了 GradientDescentOptimizer 优化,即使用梯度下降的方法来减小这个损失值,我们训练模型就是来模拟这个过程。

运行模型

最后我们将模型运行起来即可,运行时必须声明一个 Session 对象,然后初始化所有的变量,然后执行一步步的训练即可,实现如下:


with tf.Session() as sess:sess.run(tf.global_variables_initializer())for step in range(201):sess.run(train, feed_dict={x: x_data, y: y_data})if step % 10 == 0:print(step, sess.run(w), sess.run(b))

这里定义了 200 次循环,每一次循环都会执行一次梯度下降优化,每次循环都调用一次 run() 方法,传入的变量就是刚才定义个 train 对象,feed_dict 就把 placeholder 类型的变量赋值即可。随着训练的进行,损失会越来越小,w 和 b 也会被慢慢调整为拟合的值。

在这里每 10 次 循环我们都打印输出一下拟合的 w 和 b 的值,结果如下:


0 [ 0.31494665  0.33602586] [ 0.84270978]
10 [ 0.19601417  0.17301694] [ 0.47917289]
20 [ 0.23550016  0.18053198] [ 0.44838765]
30 [ 0.26029009  0.18700737] [ 0.43032286]
40 [ 0.27547371  0.19152154] [ 0.41897511]
50 [ 0.28481475  0.19454622] [ 0.41185945]
60 [ 0.29058149  0.19652548] [ 0.40740564]
70 [ 0.2941508   0.19780098] [ 0.40462157]
80 [ 0.29636407  0.1986146 ] [ 0.40288284]
90 [ 0.29773837  0.19913   ] [ 0.40179768]
100 [ 0.29859257  0.19945487] [ 0.40112072]
110 [ 0.29912385  0.199659  ] [ 0.40069857]
120 [ 0.29945445  0.19978693] [ 0.40043539]
130 [ 0.29966027  0.19986697] [ 0.40027133]
140 [ 0.29978839  0.19991697] [ 0.40016907]
150 [ 0.29986817  0.19994824] [ 0.40010536]
160 [ 0.29991791  0.1999677 ] [ 0.40006563]
170 [ 0.29994887  0.19997987] [ 0.40004089]
180 [ 0.29996812  0.19998746] [ 0.40002549]
190 [ 0.29998016  0.19999218] [ 0.40001586]
200 [ 0.29998764  0.19999513] [ 0.40000987]

可以看到,随着训练的进行,w 和 b 也慢慢接近真实的值,拟合越来越精确,接近正确的值。

结语

以上便是通过一个最简单的平面拟合的案例来说明了一下 TensorFlow 的用法,是不是很简单?

转载于:https://my.oschina.net/u/3720876/blog/1613264

芝麻HTTP:TensorFlow基础入门相关推荐

  1. 视频教程-人人都会深度学习之Tensorflow基础入门-深度学习

    人人都会深度学习之Tensorflow基础入门 大数据工程师/算法工程师/大数据讲师,毕业于西华大学软件工程专业.在大数据领域有着丰富的实战经验. 擅长领域:Spark/Hadoop.算法设计及系统架 ...

  2. Tensorflow基础入门十大操作总结

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:李祖贤,Datawhale高校群成员,深圳大学 TensorFlo ...

  3. MOOC网深度学习应用开发1——Tensorflow基础、多元线性回归:波士顿房价预测问题Tensorflow实战、MNIST手写数字识别:分类应用入门、泰坦尼克生存预测

    Tensorflow基础 tensor基础 当数据类型不同时,程序做相加等运算会报错,可以通过隐式转换的方式避免此类报错. 单变量线性回归 监督式机器学习的基本术语 线性回归的Tensorflow实战 ...

  4. 少走弯路:强烈推荐的TensorFlow快速入门资料(可下载)

    (图片付费下载自视觉中国) 作者 | 黄海广 来源 | 机器学习初学者(ID: ai-start-com) 知识更新非常快,需要一直学习才能跟上时代进步,举个例子:吴恩达老师在深度学习课上讲的Tens ...

  5. TF学习:Tensorflow基础案例、经典案例集合——基于python编程代码的实现

    TF学习:Tensorflow基础案例.经典案例集合--基于python编程代码的实现 目录 Tensorflow的使用入门 1.TF:使用Tensorflow输出一句话 2.TF实现加法 3.TF实 ...

  6. 带你少走弯路:强烈推荐的TensorFlow快速入门资料和翻译(可下载)

    知识更新非常快,需要一直学习才能跟上时代进步,举个例子:吴恩达老师在深度学习课上讲的TensorFlow使用,这个肯定是他近几年才学的,因为谷歌开源了TensorFlow也就很短的时间. 吴恩达老师以 ...

  7. 【天池赛事】零基础入门语义分割-地表建筑物识别 Task4:评价函数与损失函数

    [天池赛事]零基础入门语义分割-地表建筑物识别 Task1:赛题理解与 baseline(3 天) – 学习主题:理解赛题内容解题流程 – 学习内容:赛题理解.数据读取.比赛 baseline 构建 ...

  8. 深度学习(11)TensorFlow基础操作七: 向前传播(张量)实战

    深度学习(11)TensorFlow基础操作七: 向前传播(张量)实战 1. 导包 2. 加载数据集 3. 转换数据类型 4. 查看x.shape, y.shape, x.dtype, y.dtype ...

  9. 深度学习(10)TensorFlow基础操作六: 数学运算

    深度学习(10)TensorFlow基础操作六: 数学运算 1. Operation type 2. + - * / % // 3. tf.math.log & tf.exp 4. log2, ...

最新文章

  1. 创业公司技术总监,去上市公司面试,结果凉了!
  2. Python2的Json反序列化工具
  3. MVC匿名类传值学习
  4. 信息管理(Information Management)
  5. CodeSmith使用笔记
  6. java 浅拷贝和深拷贝
  7. python在线翻译脚本_用python实现百度翻译的示例代码
  8. menuconfig和Kconfig、.config的关系
  9. java打印两个小人_[原创]Java画小人与阶梯问题的解答
  10. IO流基本知识总结【字节输入输出流、字符输入输出流、转换流、对象流】
  11. BroadcastReceiver之动态广播 demo+笔记
  12. iOS开发之App开发团队必须知道的 iOS 11 更新点几iPhoneX的屏幕适配
  13. Minecraft安装资源包
  14. 天下足球十大感动台词
  15. Frp配置——stcp及p2p模式
  16. 拥有火绒后关闭Windows防火墙
  17. RHCE(KVM——保存、恢复、克隆虚拟机)
  18. APP网络测试要点及弱网模拟
  19. JAVA写文本编辑器(四)
  20. 洛谷P1035题解 [NOIP2002 普及组] 级数求和

热门文章

  1. Atitit. 查找linux 项目源码位置
  2. java自动装箱性能
  3. Objective-c的@property 详解
  4. python变量域名_Python实现从url中提取域名的几种方法
  5. loadrunner录制0事件_LoadRunner脚本异常捕获处理
  6. mvn 默认scope_maven scope 的作用
  7. 荒岛余生最后一个包裹_豆瓣评分8.5,一个人撑起整部电影,最后的彩蛋让人无语...
  8. CDN网络究竟是怎么加速的?
  9. tensorflow中的BN层实现
  10. Linux学习笔记(一)Linux常用命令