一、tf.placeholder() 占位符
tf.placeholder(
dtype,
shape=None,
name=None
)
函数参数:
dtype:数据类型。常用的是tf.float32,tf.float64等数值类型
shape:数据形状。默认是None,就是一维值,也可以是多维(比如[2,3], [None, 3]表示列是3,行不定)
name:名称
返回:Tensor类型。
二、OP节点
节点概念
TensorFlow用图来表示相关计算任务,图中的节点称为 operation,缩写成op。一个节点获得0个或者多个张量(tensor)。图必须会在会话(Session)中被启动,会话将图的节点(op)分发到CPU或GPU之类的设备上,同时提供执行节点(op)的方法,这些方法执行后,将产生的张量(tensor)返回。
三、constant(常量)
constant是tensorflow的常量节点,通过constant方法创建,其是计算图中的起始节点,是传入数据。
创建方式:
cons = tf.constant(value=[1,2],dtype=tf.float32,shape=(1,2),name='testConstant',verify_shape=False)
参数说明:
value:初始值,必填,必须是一个张量(1或[1,2,3]或[[1,2,3],[2,2,3]]或……)。
dtype:数据类型,选填,默认为value的数据类型,传入参数为tensotflow下的枚举值(float32,float64….)。
shape:数据形状,选填,默认为value的shape,设置时不得比value小,可以比value阶数,纬度更高,超过部分按value提供最后一个数字填充。
name:常量,选填,默认值不重复,根据创建顺序为(Const,Const_1,Const_2…….)。
verify_shape:是否验证value的shape和指定shape相符,若设为True则进行验证,不相符时会抛出异常。
四、Variable(变量)
variable是tensorflow的变量节点,通过Variable方法创建,并且需要传递初始值,在使用前需要通过tensorflow方法进行初始化。
#创建方式:
v1 = tf.Variable(tf.zeros([3, 10]), dtype=tf.float64, name='v1')
# 创建变量
name_variable = tf.Variable(value, name)
# 初始化单个变量
init_op=variable.initializer()
# 初始化所有变量
init_op=tf.initialize_all_variables()
# 更新操作
update_op=tf.assign(variable to be updated, new_value)
五、张量(tensor)
1、概念
张量表示从向量空间到实数域的多重线性映射。在TensorFlow中用tensor数据结构来表示所有的数据,计算图中,操作间传递的数据都是tensor。
2、张量的阶和维数(shape)
在TensorFlow中,张量的维数被描述为“阶”,张量以list形式存储。list中有几重中括号,对应的张量就表示几阶。
如test = [[1,2,3],[1,2,3],[1,2,3]],test就是一个二阶张量。一阶张量,相当于一个向量;二阶张量,相当于一个矩阵。
例如,t=[ [1,2,3],[4,5,6],[7,8,9] ]来说,它的shape==>[3,3],shape可以理解成:当脱去最外层的一对中括号后,里面有3个小list,然后每个小list里又有3个元素,所以该张量的shape==>[3,3]。
如[ [1,2,3],[4,5,6] ] 的shape=[2,3](因为当脱去最外层的一对中括号后,里面有2个小list,然后每个小list里又有3个元素,所以该张量的shape==>[2,3]。
六、Graph
Graph:要组装的结构,由许多操作组成,其中的每个连接点代表一种操作
七、tf.assign函数
tf.assign
通过将 “value” 赋给 “ref” 来更新 “ref”.
#函数原型
assign (
ref ,
value ,
validate_shape = None ,
use_locking = None ,
name = None
)
参数说明:
ref:一个可变的张量.应该来自变量节点.节点可能未初始化.
value:张量.必须具有与 ref 相同的类型.是要分配给变量的值.
validate_shape:一个可选的 bool.默认为 True.如果为 true, 则操作将验证 “value” 的形状是否与分配给的张量的形状相匹配;如果为 false, “ref” 将对 “值” 的形状进行引用.
use_locking:一个可选的 bool.默认为 True.如果为 True, 则分配将受锁保护;否则, 该行为是未定义的, 但可能会显示较少的争用.
name:操作的名称(可选).
tf.assign_add
通过向 “ref” 添加 “value” 来更新 “ref”.
#函数原型
assign_add (
ref ,
value ,
use_locking = None ,
name = None
)
tf.assign_sub
通过从 “ref” 中减去 “value” 来更新 “ref”.
#函数原型
assign_sub (
ref ,
value ,
use_locking = None ,
name = None
)
此操作在更新完成后输出 “ref”,这使得更易于链接需要使用重置值的操作.
tf.tf.multiply()
这个函数实现的是元素级别的相乘,也就是两个相乘的数元素各自相乘,而不是矩阵乘法.
示例:
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.multiply(input1,input2)
八、softmax()函数
Softmax从字面上来说,可以分成soft和max两个部分。max故名思议就是最大值的意思。Softmax的核心在于soft,而soft有软的含义,与之相对的是hard硬。很多场景中需要我们找出数组所有元素中值最大的元素,实质上都是求的hardmax。下面使用Numpy模块以及TensorFlow深度学习框架实现hardmax。
使用Numpy模块实现hardmax:
import numpy as np
a = np.array([1, 2, 3, 4, 5]) # 创建ndarray数组
a_max = np.max(a)
print(a_max) # 5
使用TensorFlow实现hardmax:
import tensorflow as tf
print(tf.__version__) # 2.0.0
a_max = tf.reduce_max([1, 2, 3, 4, 5])
print(a_max) # tf.Tensor(5, shape=(), dtype=int32)
通过上面的例子可以看出hardmax最大的特点就是只选出其中一个最大的值,即非黑即白。但是往往在实际中这种方式是不合情理的,比如对于文本分类来说,一篇文章或多或少包含着各种主题信息,我们更期望得到文章对于每个可能的文本类别的概率值(置信度),可以简单理解成属于对应类别的可信度。所以此时用到了soft的概念,Softmax的含义就在于不再唯一的确定某一个最大值,而是为每个输出分类的结果都赋予一个概率值,表示属于每个类别的可能性。
下面给出Softmax函数的定义(以第i个节点输出为例):
其中 z i z_i zi为第i个节点的输出值,C为输出节点的个数,即分类的类别个数。通过Softmax函数就可以将多分类的输出值转换为范围在[0, 1]和为1的概率分布。
@Time : 2020/10
@Author : zhzhang