前言
本文只是tensorflow的简单介绍。
安装
很简单直接
pip install tensorflow
就可以了。
如果喜欢用Pycharm ,可以直接按照下包的流程把它下载下来即可。
验证安装:hello world程序
import tensorflow as tf
hello=tf.constant("hello ,world")
sess=tf.Session()
print(sess.run(hello))
sess.close()
工作方式
tensorflow 的名字已经说明了它最重要的两个概念——Tensor和Flow。
Tensor(张量)
在tensorflow中所有的数据都是通过张量进行表示的,在这里可以把张量理解为一个数据结构。
它既可以表示常量也可以表示为变量和多维度矩阵。
在Tensorflow中 一个数 就是一个0阶张量,也称做标量(scalar)
那么一个向量(一维数组)就是一个1阶张量。
那么N维数组就是N阶张量.
既然它是一个数据结构的话那就有自己的属性。张量有三个属性。名字(name),维度(shape)和类型(type)
import tensorflow as tf
a=tf.constant(1,name="a")
b=tf.constant([1,2],name="b")
c=tf.constant([[1],[2]],name="c")
print a
print b
print c
结果是:
Tensor("a_1:0", shape=(), dtype=int32)
Tensor("b_2:0", shape=(2,), dtype=int32)
Tensor("c:0", shape=(2, 1), dtype=int32)
shape=() 就说明它是个标量。
shape=(2,)说明它是个一维数组长度为2
shape=(2,1)说明它是一个二维数组
tensor显示指定数据的类型其实就是在数据计算的时候做类型检查。
Tensorflow 支持14种不同的类型,主要包括了小数(tf.float32,tf.float64)整数(tf.int8、tf.int16、tf.int32、tf.int64、tf.uint8)、布尔类型(tf.bool)、复数(tf.complex64、tf.complex128)
Flow(流)
我们把所有的数据理解成一个节点,然而每个数据的计算无非就是这个节点到另外一个节点的流向过程。例如
执行c=a+b
我们可以理解为a和b的数据经过add这个操作流向了C。flow也就很形象的去解释了这个概念。
计算图
结合上面的 张量和流的概念,我们甚至可以把上面的c=a+b理解为一个节点组成的图。
没错,这就是Tensorflow中非常重要的一个概念计算图。上面的是最小的图。经过我们设计变化,图会变得很大。但是无非也就是输入流向计算过程流向输出仅此而已。
计算图的使用
根据上述概念可以知道我们的tensorflow就是一个一个的tensor。一条一条的flow以及一个个的op 组成的图。所以我们使用tensorflow需要两步。
设计图
用实际的例子来看,就是之前的c=a+b
我们需要首先设计图。
#定义常量op
a=tf.constant(2)
b=tf.constant(3)
#定义一个op操作
add=tf.add(a,b)
#定义一个占位变量(因为c不知道等于多少)
c=tf.placeholder(tf.int16)
ok这就是我们画出的那张图的各个节点和操作。
启动图(会话)
会话也叫session
在tensorflow中session可以管理运行时候所有的资源。也就是相当于前面都是初始化、必须在会话里面进行运行。代码很简单。
#定义一个会话
sess=tf.Session()
c=sess.run(add)
print c
sess.close()
输出是5.
如果这样写。最后一个必须显式的关闭这个会话,然而当程序一场推出的时候,关闭会话的那条命令可能不会执行从而导致资源泄漏。我们可以使用python的上下文管理器使用会话。
with tf.Session() as sess:
c=sess.run(add)
print c
代码
# -*- coding: utf-8 -*-
# @Time : 2017/12/4 下午3:35
# @Author : SkullFang
# @Email : yzhang.private@gmail.com
# @File : demo1.py
# @Software: PyCharm
import tensorflow as tf
#定义常量op
a=tf.constant(2)
b=tf.constant(3)
#定义一个op操作
add=tf.add(a,b)
#定义一个占位变量(因为c不知道等于多少)
c=tf.placeholder(tf.int16)
# #定义一个会话
with tf.Session() as sess:
c=sess.run(add)
print c