TensorFlow

TensorFlow核心程序由2个独立部分组成:

    a:Building the computational graph构建计算图
    b:Running the computational graph运行计算图
1.一个computational graph(计算图)是一系列的TensorFlow操作排列成一个节点图。
  1.1 构建计算图
node1 = tf.constant(3.0, dtype=tf.float32)
node2 = tf.constant(4.0)# also tf.float32 implicitly
print(node1, node2)

结果:

Tensor("Const:0", shape=(), dtype=float32) Tensor("Const_1:0",shape=(), dtype=float32)

  1.2运行计算图

我们必须用到session:一个session封装了TensorFlow运行时的控制和状态

sess = tf.Session()
print(sess.run([node1, node2]))

  1.3 我们可以组合Tensor节点操作(操作仍然是一个节点)来构造更加复杂的计算,

node3 = tf.add(node1, node2)
print("node3:", node3)
print("sess.run(node3):", sess.run(node3))

  运行结果:

node3:Tensor("Add:0", shape=(), dtype=float32)
sess.run(node3):7.0

  1.4 TensorFlow提供一个统一的调用称之为TensorBoard,它能展示一个计算图的图片;如下面这个截图就展示了这个计算图

  1.5 一个计算图可以参数化的接收外部的输入,作为一个placeholders(占位符),一个占位符是允许后面提供一个值的。
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b # + provides a shortcut for tf.add(a, b)
  这里有点像一个function (函数)或者lambda表达式,我们定义了2个输入参数a和b,然后提供一个在它们之上的操作。我们可以使用
feed_dict(传递字典)参数传递具体的值到run方法的占位符来进行多个输入,从而来计算这个图。  
print(sess.run(adder_node, {a:3, b:4.5}))
print(sess.run(adder_node, {a: [1,3], b: [2,4]}))
7.5
[3. 7.]
  在TensorBoard,计算图类似于这样:
  1.6我们可以增加另外的操作来让计算图更加复杂,比如
    add_and_triple = adder_node *3.
print(sess.run(add_and_triple, {a:3, b:4.5}))
输出结果是:
22.5
  在TensorBoard,计算图类似于这样:
  1.7 在机器学习中,我们通常想让一个模型可以接收任意多个输入,比如大于1个,好让这个模型可以被训练,在不改变输入的情况下,

我们需要改变这个计算图去获得一个新的输出。变量允许我们增加可训练的参数到这个计算图中,它们被构造成有一个类型和初始值:
W = tf.Variable([.3], dtype=tf.float32)
b = tf.Variable([-.3], dtype=tf.float32)
x = tf.placeholder(tf.float32)
linear_model = W*x + b

  1.8 当你调用tf.constant时常量被初始化,它们的值是不可以改变的,而变量当你调用tf.Variable时没有被初始化,

在TensorFlow程序中要想初始化这些变量,你必须明确调用一个特定的操作,如下:
 init = tf.global_variables_initializer()
sess.run(init)

  1.9 要实现初始化所有全局变量的TensorFlow子图的的处理是很重要的,直到我们调用sess.run,这些变量都是未被初始化的。

既然x是一个占位符,我们就可以同时地对多个x的值进行求值linear_model,例如:
 print(sess.run(linear_model, {x: [1,2,3,4]}))
求值linear_model
输出为
[0. 0.30000001 0.60000002 0.90000004]

  1.10 我们已经创建了一个模型,但是我们至今不知道它是多好,在这些训练数据上对这个模型进行评估,我们需要一个

y占位符来提供一个期望的值,并且我们需要写一个loss function(损失函数),一个损失函数度量当前的模型和提供
的数据有多远,我们将会使用一个标准的损失模式来线性回归,它的增量平方和就是当前模型与提供的数据之间的损失
,linear_model - y创建一个向量,其中每个元素都是对应的示例错误增量。这个错误的方差我们称为tf.square。然后
,我们合计所有的错误方差用以创建一个标量,用tf.reduce_sum抽象出所有示例的错误。
 y = tf.placeholder(tf.float32)
squared_deltas = tf.square(linear_model - y)
loss = tf.reduce_sum(squared_deltas)
print(sess.run(loss, {x: [1,2,3,4], y: [0, -1, -2, -3]}))
输出的结果为
23.66

  1.11 我们分配一个值给W和b(得到一个完美的值是-1和1)来手动改进这一点,一个变量被初始化一个值会调用tf.Variable,

但是可以用tf.assign来改变这个值,例如:
fixW=tf.assign(W,[1.])
fixb = tf.assign(b, [1.])
sess.run([fixW, fixb])
print(sess.run(loss, {x: [1,2,3,4], y: [0, -1, -2, -3]}))
最终打印的结果是:
0.0

  1.12 tf.train APITessorFlow提供optimizers(优化器),它能慢慢改变每一个变量以最小化损失函数,最简单的优化器是

gradient descent(梯度下降),它根据变量派生出损失的大小,来修改每个变量。通常手工计算变量符号是乏味且容易出错的,
因此,TensorFlow使用函数tf.gradients给这个模型一个描述,从而能自动地提供衍生品,简而言之,优化器通常会为你做这个。例如:
    optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
sess.run(init)# reset values to incorrect defaults.
for iin range(1000):
sess.run(train, {x: [1,2,3,4], y: [0, -1, -2, -3]}) print(sess.run([W, b]))
输出结果为
[array([-0.9999969], dtype=float32), array([ 0.99999082], dtype=float32)]

本文仅用于学习研究,非商业用途,如需参考,请注明出处,作者:木子龙。

本文参考了以下地址的讲解,万分感谢,如有侵权,请联系我会尽快删除,929994365@qq.com:

https://blog.csdn.net/lengguoxing/article/details/78456279

https://www.cnblogs.com/kang06/p/9373600.html

 
 
 
 
 
 
 
 
 

TensorFlow 框架的更多相关文章

  1. TensorFlow框架(3)之MNIST机器学习入门

    1. MNIST数据集 1.1 概述 Tensorflow框架载tensorflow.contrib.learn.python.learn.datasets包中提供多个机器学习的数据集.本节介绍的是M ...

  2. TensorFlow框架(5)之机器学习实践

    1. Iris data set Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理.Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集.数据集包含150个数据集,分为3类, ...

  3. 人工智能 tensorflow框架-->简介及安装01

    简介:Tensorflow是google于2015年11月开源的第二代机器学习框架. Tensorflow名字理解:图形边中流动的数据叫张量(Tensor),因此叫Tensorflow 既 张量流动 ...

  4. 【TensorFlow篇】--Tensorflow框架实现SoftMax模型识别手写数字集

    一.前述 本文讲述用Tensorflow框架实现SoftMax模型识别手写数字集,来实现多分类. 同时对模型的保存和恢复做下示例. 二.具体原理 代码一:实现代码 #!/usr/bin/python ...

  5. 【TensorFlow篇】--Tensorflow框架初始,实现机器学习中多元线性回归

    一.前述 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,T ...

  6. 跟我学算法-吴恩达老师(超参数调试, batch归一化, softmax使用,tensorflow框架举例)

    1. 在我们学习中,调试超参数是非常重要的. 超参数的调试可以是a学习率,(β1和β2,ε)在Adam梯度下降中使用, layers层数, hidden units 隐藏层的数目, learning_ ...

  7. 深度学习Tensorflow框架的安装

    选择下载安装Anaconda3.4.2.0-python3.5版本安装(3.6版本不适合后面opencv-python的安装): 打开Anaconda Prompt命令窗口编辑界面(黑窗口),输入py ...

  8. 吴裕雄--天生自然 神经网络人工智能项目:基于深度学习TENSORFLOW框架的图像分类与目标跟踪报告(续四)

    2. 神经网络的搭建以及迁移学习的测试 7.项目总结 通过本次水果图片卷积池化全连接试验分类项目的实践,我对卷积.池化.全连接等相关的理论的理解更加全面和清晰了.试验主要采用python高级编程语言的 ...

  9. python机器学习TensorFlow框架

    TensorFlow框架 关注公众号"轻松学编程"了解更多. 一.简介 ​ TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运 ...

  10. (第一章第五部分)TensorFlow框架之变量OP

    系列博客链接: (一)TensorFlow框架介绍:https://www.cnblogs.com/kongweisi/p/11038395.html (二)TensorFlow框架之图与Tensor ...

随机推荐

  1. How the Bitcoin protocol actually works

    sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...

  2. nginx-1.12.1编译参数详情

    一下nginx-1.12.1编译参数详情 #/usr/local/nginx/sbin/nginx -V nginx version: nginx/1.12.1 built by gcc 4.4.7 ...

  3. javascript 伪数组与标准数组

    伪数组 1. 是一个对象 2. 必须有length 属性,length 值是number 类型 3. 如果这个对象的length 不为0,那么必须要有按照下标存储的数据 标准数组 判断数据是否是标准数 ...

  4. win2003服务器安全设置教程

    服务器安全设置 1.系统盘和站点放置盘必须设置为NTFS格式,方便设置权限. 2.系统盘和站点放置盘除administrators 和system的用户权限全部去除. 3.启用windows自带防火墙 ...

  5. adb 安装apk到只当设备

    1.adb devices 2,选择指定的设备,如上面的那个 然后:adb -s 292be8597d94 install *apk

  6. C#实现虚拟控件列表显示100w个控件方法

    方法一: C#的FlowlayoutPanel添加一定数据量的控件后就会空白,通过虚拟列表方式可以解决这个问题. 1.创建一个包含ScrollPanel和滚动条的用户控件,定义一个List,添加控件时 ...

  7. 使用 Parallel LINQ 进行数据分页

    a)   第一种[耗时11~18s],这种查询方式并不是很优化,但是目前也没有想到更好的方式,除了创建一张中间表,是不是可以使用[全文索引]? SELECT * FROM ( SELECT  ROW_ ...

  8. Java——Struts2 之国际化 struts.custom.i18n.resources=globalMessages

    1.在src下 建立 struts.properties 文件,内容为:struts.custom.i18n.resources=globalMessages struts.custom.i18n.r ...

  9. tessaract ocr简介

    Tesseract的历史Tesseract是一个开源的OCR引擎,惠普公司的布里斯托尔实验室在1984-1994年开发完成.起初作为惠普的平板扫描仪的文字识别引擎.Tesseract在1995年UNL ...

  10. Postfix邮件服务 - DNS配置

    DNS 域名系统服务器 IP 与 域名之间解析 :提供分层的域名解析 服务:bing 伯克利加州大学 应用最广的域名服务系统: bind 主要分为 主配置文件 和 域数据记录文件 yum 安装: yu ...