一、简介

  深度学习的框架有很多:TensorFlow、Caffe、Theano、Torch...TensorFlow作为谷歌重要的开源项目,有非常火热的开源的开源社区推动着开源项目的发展,它能让项目有旺盛的生命力并在生命周期中不断涌现新的功能并以较快的迭代来更新Bug修复。Keras是在TensorFlow基础上构建的高层API,Keras在TensorFlow中。

  Tensorflow中实现代码可能跟我们python程序有那么一点不一样,因为tensorflow有他自己的框架和体系,会用自己更加适配的方式来表达描述过程。

用tensorflow做线性回归

import tensorflow as tf
import numpy as np# .rand生成一个[0~1]之间2行100列的数组
# .randn生成服从正态分布的数组
x_data = np.float32(np.random.rand(2, 100))
y_data = np.dot([0.100, 0.200], x_data) + 0.300# 构造一个线性模型
b = tf.Variable(tf.zeros([1]))
W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
y = tf.matmul(W, x_data) + b# 最小化方差
loss = tf.reduce_mean(tf.square(y - y_data))
# 设置学习率0.5的梯度下降算法
optimizer = tf.train.GradientDescentOptimizer(0.5)
# 求最小值
train = optimizer.minimize(loss)# 初始化变量
init = tf.global_variables_initializer()# 启动图 (graph)
sess = tf.Session()
sess.run(init)# 训练线性回归模型
for step in range(0, 201):sess.run(train)if step % 20 == 0:print(step, sess.run(W), sess.run(b))# 得到最佳拟合结果 W: [[0.100  0.200]], b: [0.300]

二、基本用法

使用tensorflow的注意事项:

  • 使用 (graph) 来表示计算任务.
  • 被称之为 会话 (Session)中执行图.
  • 使用 tensor 表示数组.
  • 通过 变量 (Variable) 维护状态.
  • 使用 feed 和 fetch 可以任意的操作(arbitrary operation) 赋值或者从其中获取数据.

  tensorflow使用来表示计算任务,图中的每个节点称之为op(operation),节点获得 tensor 执行计算,产生 tensor。每个 Tensor 是一个类型化的多维数组。

  TensorFlow图描述了计算的过程。为了进行计算, 图必须在会话里被启动。会话将图的op分发到诸如CPU或GPU之类的设备上, 同时提供执行op的方法。这些方法执行后, 将产生的tensor返回。

  我们写程序的时候的步骤是:先构建节点op描绘图,然后在会话中执行图中op。

第一步:构建图中的节点op

import tensorflow as tf# 创建一个常量 op, 产生一个 1x2 矩阵. 这个 op 被作为一个节点
# 加到默认图中.# 构造器的返回值代表该常量 op 的返回值.
matrix1 = tf.constant([[3., 3.]])# 创建另外一个常量 op, 产生一个 2x1 矩阵.
matrix2 = tf.constant([[2.],[2.]])# 创建一个矩阵乘法 matmul op ,
# 把 'matrix1' 和 'matrix2' 作为输入.
# 返回值 'product' 代表矩阵乘法的结果.
product = tf.matmul(matrix1, matrix2)# 为了真正进行矩阵相乘运算并得到矩阵乘法的结果,你必须在会话里启动这个图.

现在有三个节点, 两个constant()op,和一个matmul()op。为了真正进行矩阵相乘运算, 并得到矩阵乘法的结果, 你必须在会话里启动这个图

第二步:在会话中执行图中的op

启动图的第一步是创建一个Session对象, 如果无任何创建参数, 会话构造器将启动默认图。

sess = tf.Session() # 启动默认图.# 调用 sess 的 'run()' 方法来执行op
# 'product' 代表了矩阵乘法 op 的输出,表明我们希望取回矩阵乘法op的输出.
result = sess.run(product)
print(result)   # ==> [[ 12.]]sess.close()    # 任务完成, 关闭会话.

Session 对象在使用完后需要关闭以释放资源。除了显式调用 close 外, 也可以使用 "with" 代码块 来自动完成关闭动作.

with tf.Session() as sess:result = sess.run(product)print(result)

Python中使用一个会话Session来启动图, 并调用Session.run()方法执行操作.

变量

import tensorflow as tf
# 创建一个变量, 初始化为标量 0.
state = tf.Variable(0, name="counter")# 创建一个 op, 其作用是使 state 增加 1
one = tf.constant(1)
new_value = tf.add(state, one)  # new_value = state + 1
update = tf.assign(state, new_value)    # state = new_value 只是在描绘图,并不会真正的执行# 启动图后, 变量必须先经过'初始化'(init)
init = tf.global_variables_initializer()# 启动图, 运行 op
with tf.Session() as sess:sess.run(init)    # 运行 'init' print(sess.run(state))    # 打印'state'的初始值 0# 运行 op, 更新 'state', 并打印 'state'for _ in range(3):sess.run(update)print(sess.run(state))# 0
# 1
# 2
# 3

我们可以通过sess.run取回多个tensor,

input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)
intermed = tf.add(input2, input3)
mul = tf.mul(input1, intermed)with tf.Session():result = sess.run([mul, intermed])print result# 输出:
# [array([ 21.], dtype=float32), array([ 7.], dtype=float32)]

Feed

使用 tf.placeholder() 为这些操作创建占位符,然后用feed去替换占位符。feed 提供数据作为run()调用的参数。

import tensorflow as tf
# 描画图
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.multiply(input1, input2)
# 创建会话层计算图
with tf.Session() as sess:print(sess.run([output], feed_dict={input1:[7.], input2:[2.]}))print(sess.run([output], feed_dict={input1:7, input2:2}))
# 输出:
# [array([ 14.], dtype=float32)]

  tensorflow可以指定一个Batch的size来规定每次训练的样本数。同时还可以进行多轮(epoch)训练,

关于多个GPU的分类使用

TensorFlow一般你不需要显式指定使用CPU还是GPU,TensorFlow能自动检测。如果检测到 GPU,TensorFlow会尽可能地利用找到的第一个GPU来执行操作。

如果你的电脑有两个GPU,tensorflow默认是不会使用的,为了让 TensorFlow 使用这些 GPU, 你必须将 op 明确指派给它们执行. with...Device 语句用来指派特定的 CPU 或 GPU 执行操作:

with tf.Session() as sess:with tf.device("/gpu:1"):matrix1 = tf.constant([[3., 3.]])matrix2 = tf.constant([[2.],[2.]])product = tf.matmul(matrix1, matrix2)...

关于IPython的tensorflow的使用

为了便于使用诸如IPython之类的Python交互环境,比如jupyter notebook。可以使用InteractiveSession代替Session 类,使用Tensor.eval()Operation.run()方法代替Session.run()。这样可以避免使用一个变量来持有会话。

# 进入一个交互式 TensorFlow 会话.
import tensorflow as tf
sess = tf.InteractiveSession()x = tf.Variable([1.0, 2.0])
a = tf.constant([3.0, 3.0])# 使用初始化器 initializer op 的 run() 方法初始化 'x'
x.initializer.run()# 增加一个减法 sub op, 从 'x' 减去 'a'. 运行减法 op, 输出结果
sub = tf.subtract(x, a)
print(sub.eval())    # [-2. -1.]

参考文献:

tensorflow中文社区

TensorFlow框架学习笔记相关推荐

  1. TensorFlow Lite学习笔记

    TensorFlow Lite学习笔记 目录 TensorFlow Lite学习笔记 Tensorflow LIte Demo 模型固化freeze_graph和模型优化optimize_for_in ...

  2. TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络

    TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络 转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnote ...

  3. SpringMVC框架--学习笔记(下)

    接上篇:SpirngMVC框架--学习笔记(上):https://blog.csdn.net/a745233700/article/details/81038382 17.全局异常处理: 系统中异常包 ...

  4. SpringMVC框架--学习笔记(上)

    1.SpringMVC入门程序: (1)导入jar包:spring核心jar包.spring-webmvc整合Jar包 (2)配置前端控制器:web.xml文件中 <?xml version=& ...

  5. mybatis框架--学习笔记(下)

    上篇:mybatis框架--学习笔记(上):https://blog.csdn.net/a745233700/article/details/81034021 8.高级映射: (1)一对一查询: ①使 ...

  6. mybatis框架--学习笔记(上)

    使用JDBC操作数据库的问题总结: (1)数据库连接,使用时创建,不使用时立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能. 设想:使用数据库连接池管理数据库连接. (2) ...

  7. JavaSE中Map框架学习笔记

    前言:最近几天都在生病,退烧之后身体虚弱.头疼.在床上躺了几天,什么事情都干不了.接下来这段时间,要好好加快进度才好. 前面用了三篇文章的篇幅学习了Collection框架的相关内容,而Map框架相对 ...

  8. python表单提交的两种方式_Flask框架学习笔记之表单基础介绍与表单提交方式

    本文实例讲述了Flask框架学习笔记之表单基础介绍与表单提交方式.分享给大家供大家参考,具体如下: 表单介绍 表单是HTML页面中负责数据采集功能的部件.由表单标签,表单域和表单按钮组成.通过表单,将 ...

  9. php框架费尔康,GitHub - majixian/study-phalcon: phalcon(费尔康)框架学习笔记

    phalcon(费尔康)框架学习笔记 以实例程序invo为例(invo程序放在网站根目录下的invo文件夹里,推荐php版本>=5.4) 环境不支持伪静态网址时的配置 第一步: 在app\con ...

最新文章

  1. CCF BDCI 多人种人脸识别冠军分享
  2. 3.6评分卡极端值的识别以及处理
  3. MIT正式发布编程语言Julia 1.0:Python、R、C++三合一
  4. linux命令passwd各个参数含义
  5. 将jQuery的复选框设置为“已选中”?
  6. 百度大脑EasyDL专业版挑战赛正式开启,挑战没有做不到的模型!
  7. c语言交换字符串,C语言中怎样交换两个字符串?C语言中怎样交 – 手机爱问
  8. java怎么将文件传到服务器,Java文件传到服务器
  9. APP银联支付(微信、支付宝、云闪付)
  10. csp php,了解CSP
  11. duilib隐藏(显示)任务栏图标方式
  12. 浅论程序员的工作经历与工作经验
  13. Ubuntu 制作光盘镜像文件
  14. 111wqdqwdwedwedwdwededwedwe
  15. python爬虫学习-scrapy爬取链家房源信息并存储
  16. HashMap的四种同步方式
  17. Blurring the Lines between Blockchains and Database Systems: the Case of Hyperledger Fabric
  18. 下载学习通上的文档、课件
  19. MVC框架简易留言板实例
  20. springboot设置首页

热门文章

  1. textarea标签实现change事件保存
  2. 宇枫资本投资理财收益变大
  3. 被嫌弃没有数据分析方法论?把OSM模型怼他脸上!
  4. pythonflask教程 视频_Python Flask开发入门视频教程下载
  5. 浅谈CSS3动画的凌波微步--steps()
  6. 商越发布聚贤阁1.1版本,开创国内首个支持punchout方式对接的采购SaaS平台!
  7. SEO优化网站教程6
  8. 将PDF转换为高分辨率图像
  9. 考研英语单词如何有效记忆?
  10. 中秋手机大换新 这几部爆款可以入手了