Python之TensorFlow的基本介绍-1
一、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的更多相关文章
- Google TensorFlow 机器学习框架介绍和使用
TensorFlow是什么? TensorFlow是Google开源的第二代用于数字计算(numerical computation)的软件库.它是基于数据流图的处理框架,图中的节点表示数学运算(ma ...
- python中multiprocessing.pool函数介绍_正在拉磨_新浪博客
python中multiprocessing.pool函数介绍_正在拉磨_新浪博客 python中multiprocessing.pool函数介绍 (2010-06-10 03:46:5 ...
- Python IDE Spyder的简单介绍
最近深度学习发展非常迅猛,大有一统江湖的趋势.经过一段时间学习,发现自己对这种神奇的玄学非常感兴趣,希望能够进一步的研究.而这种研究性学科单纯地看论文比较难以明白,所以希望能够跟进大牛们写的代码深入学 ...
- python学习第二讲,pythonIDE介绍以及配置使用
目录 python学习第二讲,pythonIDE介绍以及配置使用 一丶集成开发环境IDE简介,以及配置 1.简介 2.PyCharm 介绍 3.pycharm 的安装 二丶IDE 开发Python,以 ...
- python nose测试框架全面介绍十---用例的跳过
又来写nose了,这次主要介绍nose中的用例跳过应用,之前也有介绍,见python nose测试框架全面介绍四,但介绍的不详细.下面详细解析下 nose自带的SkipTest 先看看nose自带的S ...
- Python文件和目录模块介绍:glob、shutil、ConfigParser
glob模块 查找符合特定规则的文件路径名,路径名可以使用绝对路径也可以使用相对路径.查找文件会使用到三个通配符,星号*,问号?和中括号[],其中"*"表示匹配0~n个字符, &q ...
- 【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 要安装 ...
- python nose测试框架全面介绍七--日志相关
引: 之前使用nose框架时,一直使用--logging-config的log文件来生成日志,具体的log配置可见之前python nose测试框架全面介绍四. 但使用一段时间后,发出一个问题,生成的 ...
- python nose测试框架全面介绍六--框架函数别名
之前python nose测试框架全面介绍二中介绍了nose框架的基本构成,但在实际应该中我们也会到setup_function等一系列的名字,查看管网后,我们罗列下nose框架中函数的别名 1.pa ...
随机推荐
- gdb 调试core文件报错: in free () from /lib64/libc.so.6 找不到原因啊
运行程序死掉 找不到原因啊..gdb 跟踪与堆栈信息 贴出来了 麻烦大佬们看一下,给个回复,不胜感激!! Core was generated by `./scene_s0037 10037'.Pr ...
- 微信小程序 base64格式图片的显示及保存
当我们拿到如下base64格式的图片(如下图)时, base64格式的图片数据: 如何显示 ? 使用image标签,src属性添加data:image/png;base64, (注意:若imgData ...
- Markdown 打出上下标
1. 打上标,下标 2<sup>10</sup> <!--下标--> 2.同时打上下标 $x^p_ {ij}$ <!--上标为p,下标为ij,{}是用来组合i ...
- SDN阅读作业(二)
前言碎碎念 当我看到这个全英论文以后,身体和心理都出现了戒断反应,让人无比难受,毕竟自己很久没做过英语阅读理解了.总之,在舍友大佬的帮助下以及各款翻译软件的鼎力支持之下(通篇读完后还是找了中文文献来对 ...
- MAC 隐藏功能
finder 类: shift+ cmd + G (去指定路径) cmd+↑ (返回) cmd+↓(打开当前选中的文件,如果没有选中的则去选中第一个) cmd+ o (打开当前选中的文件) 以下这些 ...
- 在js中添加HTML类样式
有时候需要给元素添加类样式,但又要保留之前的类,可以使用element.classList.add("类名");
- 刷题记录:[FBCTF2019]Products Manager
目录 刷题记录:[FBCTF2019]Products Manager 一.知识点 1.基于约束的SQL注入攻击 刷题记录:[FBCTF2019]Products Manager 题目复现链接:htt ...
- 刷题记录:[De1CTF 2019]SSRF Me
目录 刷题记录:[De1CTF 2019]SSRF Me 一.涉及知识点 1.MD5长度扩展攻击 2.Python 2.x - 2.7.16 urllib.fopen支持local_file导致LFI ...
- better-scroll在vue项目中的使用
1.准备工作 在项目中安装better-scroll: npm install --save better-scroll 组件中引入插件 import BScroll from "bette ...
- elastic stack安装运行(docker)
https://www.docker.elastic.co 注:目前阿里云为7.4 elasticsearch 参考https://www.elastic.co/guide/en/elasticsea ...