一、TensorFlow™是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现,其前身是谷歌的神经网络算法库DistBelief。

  TensorFlow:
神经网络(深度)
图像:卷积神经网络
自然语言处理:循环神经网络
特点:
引入各种计算设备(CPU/GPU/TPU),以及能够很好的运行在移动端。
合理的C++使用界面,易用的Python使用界面来构造个执行你的graphs,可以直接写Python/C++程序
采用数据流图(data flow graphs),用于数值计算的开源库,能够灵活的组装图,执行图
谷歌支持,希望成为通用语言
前后端系统:
前端系统:定义程序图的机构
后端系统:运算图结构
会话:
1、运算图的结构
2、分配资源计算
3、掌握资源(变量的资源,队列,线程)

  二、前面我们已经介绍了TensorFlow在人工智能领域所能做的事情了,下面会主要介绍TensorFlow的一些常用概念。

  1)张量(tensor):

  tensor(张量):
一个类型化的N维数组
三部分:
名字、形状、数据类型
阶:和数组的维度类似
属性:
graph:张量的默认图
op:张量的操作名
name:张量的字符串描述
shape:张量的形状
动态形状和静态形状:
动态形状:(动态形状,创建一个新的张量并且数据量大小不变)
一种描述原始张量在执行过程中的一种形状(动态变化)
tf.reshape(和numpy类似),创建一个具有不同形态的新张量
静态形状:(静态形状,一旦张量固定,不能再次设置静态形状,不能夸维度修改)
创建一个张量,初始的形状
tf.get_shape():获取静态形状
tf.set_shape():更新对象的静态形状。通常用于不能推断的情况下
张量操作:
固定值张量:
tf.zeros(shape, dtype, name)
tf.ones()
tf.constant()
随机张量:(正太分布)
tf.random_normal(shape, mean, stddev, dtype, seed, name)
mean: 平均值
stddev: 标准差
类型变换:
tf.cast(x, dtype, name)
形状变换:
tf.reshape()
tf.get_shape()
tf.set_shape()

切片与扩展:
tf.concat(values, axis, name)
google提供的数据运算:
地址:https://tensorflow.google.cn/api_docs/python/tf/math

  

  2)变量(Variable):

  变量:
也是一种op,是一种特殊的张量,能够进行储存持久化,它的值就是张量,默认被训练
tf.Variable(initial_value, name, trainable)
注:
1、变量op能够持久化保存,普通张量不行
2、当定义一个变量op的时候,一定要在会话中取运行初始化
3、name参数:在tensortboard使用的时候展示名字,可以让相同op名字进行区分

  3)数据流图(Graph):

数据流图:
tensor:张量(numpy中的数组,ndarray类型然后封装为tensor),简而言之,就是数组
operation(op):专门运算的操作节点,所有操作都是一个op
图:你的这个程序架构
会话:运算程序的图

  这里介绍了上面张量和变量的OP解释。

  

  4)会话(Session):

  构建tf.Graph时将节点和边缘对象加入图中不会触发计算,图构建完成后将计算部分分流给tf.Session实现计算

  tf.Session拥有物理资源,通常与Python的with代码块中使用,在离开代码块后释放资源 。在不使用with代码块的情况下创建tf.Session,应在完成会话时明确调用tf.Session.close结束进程。

  调用Session.run创建的中间张量会在调用结束时或结束之前释放。tf.Session.run是运行节点对象和评估张量的主要方式,tf.Session.run需要指定fetch并提供供给数据(feed)字典,用户也可以指定其它选项以监督会话的运行。

  5)可视化(tensorboard):

  可视化tensorboard:
通过读取TensorFlow事件文件来运行
tf.summary.FileWriter(path, graph)
读取(cmd中执行):tensorboard --logdir "path"

  

  

  三、简单的例子

import tensorflow as tf

a = tf.constant(5.0)
b = tf.constant(4.0) sum = tf.add(a, b) # 默认的这张图,相当于一块内存
graph = tf.get_default_graph()
print(graph) # 只能运行一个图
with tf.Session() as sess:
print(sess.run(sum)) # 图的创建
# 创建一张图包含了一组op和tensor,上下文环境
# op:只要使用tensorflow的api定义的函数都是op
# tensor:指数数据
g = tf.Graph()
with g.as_default():
c = tf.constant(12.0)
# 有重载机制(默认给运算符重载成op类型)
d = c + 1.0
print(g) # 可以在会话中指定运行
# config:
# log_device_placement: 查看运行设备信息
with tf.Session(graph=g, config=tf.ConfigProto(log_device_placement=True)) as sess:
print(sess.run(c))
# eval:只有在会话上下文才可以使用
print(d.eval()) # 占位符
plt = tf.placeholder(tf.float32, [None, 3])
print(plt)
# 静态形状,一旦张量固定,不能再次设置静态形状,不能夸维度修改
plt.set_shape([2, 3])
print(plt)
# 动态形状,创建一个新的张量并且数据量大小不变
plt_reshape = tf.reshape(plt, [3,2])
print(plt_reshape) print(sess.run(plt, feed_dict={plt: [[1,2,3], [4,5,6]]})) print("*" * 20)
print(d.graph)
print("-" * 20)
print(d.op)
print("-" * 20)
print(d.name)
print("-" * 20)
# 形状表示维度大小,如果是()表示0维,?代表不确定
print(d.shape)
print("*" * 20) # 变量
e = tf.constant(1.0, name="e")
f = tf.constant(2.0, name="f")
g = tf.add(e, f, name="g")
var = tf.Variable(tf.random_normal([2,3], mean=0, stddev=1), name="var")
print(e)
print(var) # 初始化所有变量的op
init_op = tf.global_variables_initializer() with tf.Session() as sess:
# 必须初始化op,才可运行
sess.run(init_op)
# tensorboard 写入
tf.summary.FileWriter("tmp/summary/test", graph=sess.graph)
print(sess.run([g, var]))

  结果

<tensorflow.python.framework.ops.Graph object at 0x0000020B45A05B38>
9.0
<tensorflow.python.framework.ops.Graph object at 0x0000020B58472940>
Device mapping: no known devices.
add: (Add): /job:localhost/replica:0/task:0/cpu:0
add/y: (Const): /job:localhost/replica:0/task:0/cpu:0
Const: (Const): /job:localhost/replica:0/task:0/cpu:0
12.0
13.0
Tensor("Placeholder:0", shape=(?, 3), dtype=float32)
Tensor("Placeholder:0", shape=(2, 3), dtype=float32)
Tensor("Reshape:0", shape=(3, 2), dtype=float32)
[[1. 2. 3.]
[4. 5. 6.]]
********************
<tensorflow.python.framework.ops.Graph object at 0x0000020B58472940>
--------------------
name: "add"
op: "Add"
input: "Const"
input: "add/y"
attr {
key: "T"
value {
type: DT_FLOAT
}
} --------------------
add:0
--------------------
()
********************
Tensor("e:0", shape=(), dtype=float32)
Tensor("var/read:0", shape=(2, 3), dtype=float32)
[3.0, array([[-0.24931028, 0.10012802, -0.8845826 ],
[-0.08898215, -0.87531203, -0.5762032 ]], dtype=float32)]

  四、TensorFlow总体上面还是非常灵活的,采用数据流图的方式,提前配置好关系图,在通过数据传入的方式来进行下一步的运算。

    通过会话的方式来进行资源等的控制,减少人为的造成的问题。

    总体而言,TensorFlow的灵活度以及适用性还是很不错的。

Python之TensorFlow的基本介绍-1的更多相关文章

  1. Google TensorFlow 机器学习框架介绍和使用

    TensorFlow是什么? TensorFlow是Google开源的第二代用于数字计算(numerical computation)的软件库.它是基于数据流图的处理框架,图中的节点表示数学运算(ma ...

  2. python中multiprocessing.pool函数介绍_正在拉磨_新浪博客

    python中multiprocessing.pool函数介绍_正在拉磨_新浪博客     python中multiprocessing.pool函数介绍    (2010-06-10 03:46:5 ...

  3. Python IDE Spyder的简单介绍

    最近深度学习发展非常迅猛,大有一统江湖的趋势.经过一段时间学习,发现自己对这种神奇的玄学非常感兴趣,希望能够进一步的研究.而这种研究性学科单纯地看论文比较难以明白,所以希望能够跟进大牛们写的代码深入学 ...

  4. python学习第二讲,pythonIDE介绍以及配置使用

    目录 python学习第二讲,pythonIDE介绍以及配置使用 一丶集成开发环境IDE简介,以及配置 1.简介 2.PyCharm 介绍 3.pycharm 的安装 二丶IDE 开发Python,以 ...

  5. python nose测试框架全面介绍十---用例的跳过

    又来写nose了,这次主要介绍nose中的用例跳过应用,之前也有介绍,见python nose测试框架全面介绍四,但介绍的不详细.下面详细解析下 nose自带的SkipTest 先看看nose自带的S ...

  6. Python文件和目录模块介绍:glob、shutil、ConfigParser

    glob模块 查找符合特定规则的文件路径名,路径名可以使用绝对路径也可以使用相对路径.查找文件会使用到三个通配符,星号*,问号?和中括号[],其中"*"表示匹配0~n个字符, &q ...

  7. 【python】python安装tensorflow报错:python No matching distribution found for tensorflow==1.12.0

    python安装tensorflow报错:python No matching distribution found for tensorflow==1.12.0 python版本是3.7.2 要安装 ...

  8. python nose测试框架全面介绍七--日志相关

    引: 之前使用nose框架时,一直使用--logging-config的log文件来生成日志,具体的log配置可见之前python nose测试框架全面介绍四. 但使用一段时间后,发出一个问题,生成的 ...

  9. python nose测试框架全面介绍六--框架函数别名

    之前python nose测试框架全面介绍二中介绍了nose框架的基本构成,但在实际应该中我们也会到setup_function等一系列的名字,查看管网后,我们罗列下nose框架中函数的别名 1.pa ...

随机推荐

  1. 多线程 interrupt()方法

    java interrupt()方法只是设置线程的中断标记,当对处于阻塞状态的线程调用interrupt方法时(处于阻塞状态的线程是调用sleep, wait, join 的线程),会抛出Interr ...

  2. 第06组 Beta冲刺(4/5)

    队名:拾光组 组长博客链接 作业博客链接 团队项目情况 燃尽图(组内共享) 组长:宋奕 过去两天完成了哪些任务 继续维护后端代码 继续学习深入python 继续研究匿名拨打电话问题.套牌多结果处理问题 ...

  3. Mac使用秘钥登录Linux服务器

    简介 在 Mac 上配置 SSH 密钥登录远程的 Linux 相关配置 1.创建本地的 SSH 密钥 本地 生成秘钥对 ssh-keygen -t rsa -C 'youxiang@aliyun.co ...

  4. Oracle 性能分析

    1.--查出耗时长的 10条SQL select * from (select v.sql_id, v.child_number, v.sql_text, v.elapsed_time, v.cpu_ ...

  5. k8s记录-ubuntu安装docker

    sudo apt-get purge docker-ce sudo rm -rf /var/lib/dockerdocker-ce:https://download.docker.com/linux/ ...

  6. PAT 甲级 1075 PAT Judge (25分)(较简单,注意细节)

    1075 PAT Judge (25分)   The ranklist of PAT is generated from the status list, which shows the scores ...

  7. 相位展开(phase unwrapping)算法研究与实践

    1. 什么是相位展开? 相位展开(Phase Unwrapping)是一个经典的信号处理问题,它指的是从值区间中恢复原始相位值(原因在于:计算相位时,运用反正切函数,则相位图中提取的相位都是包裹在一个 ...

  8. 使用命令行操控vmware--安装

    在虚拟化出现之前,服务器的使用率很低,一般只有15%-20%,其余的资源处于闲置状态,但vmware出现之后,首先,可以充分的利用资源,从而达到节约成本的目的,其次,使得虚机便于维护.一般小型公司使用 ...

  9. Kubernetes 监控方案之 Prometheus Operator(十九)

    目录 一.Prometheus 介绍 1.1.Prometheus 架构 1.2.Prometheus Operator 架构 二.Helm 安装部署 2.1.Helm 客户端安装 2.2.Tille ...

  10. git删除远程.idea目录

    git删除远程.idea目录 1. 登录 Administrator@USER-20180708AB MINGW32 / (master) $ git config --global user.nam ...