• TensorFlow基础总结


    1.基础概念

    • Tensor:类型化的多维数组,图的边;Tensor所引用的并不持有具体的值,而是保持一个计算过程,可以使用session.run()或者t.eval()对tensor的值进行计算。
    • Operation:执行计算的单元,图的节点;这里大概可总结为Tensor创建,Tensor转换,逻辑判断,数学运算,聚合运算,序列比较与索引提取等。
    • Graph:一张有边与点的图,其表示了需要进行计算的任务;
    • Session:称之为会话的上下文,用于执行图。用户管理CPU和GPU和网络连接。

    2.Tensor

    2.1 数据结构

    • rank:数据的维度,其与线性代数中的rank不是一个概念。

    • shape:tensor每个维度数据的个数;下图表示了rank,shape的关系。

    Rank Shape Dimension number Example
    0 [] 0-D A 0-D tensor. A scalar.
    1 [D0] 1-D A 1-D tensor with shape [5].
    2 [D0, D1] 2-D A 2-D tensor with shape [3, 4].
    3 [D0, D1, D2] 3-D A 3-D tensor with shape [1, 4, 3].
    n [D0, D1, ... Dn-1] n-D A tensor with shape [D0, D1, ... Dn-1].
    • data type:单个数据的类型。下图表示了所有的types。
    Data type Python type Description
    DT_FLOAT tf.float32 32 bits floating point.
    DT_DOUBLE tf.float64 64 bits floating point.
    DT_INT8 tf.int8 8 bits signed integer.
    DT_INT16 tf.int16 16 bits signed integer.
    DT_INT32 tf.int32 32 bits signed integer.
    DT_INT64 tf.int64 64 bits signed integer.
    DT_UINT8 tf.uint8 8 bits unsigned integer.
    DT_UINT16 tf.uint16 16 bits unsigned integer.
    DT_STRING tf.string Variable length byte arrays. Each element of a Tensor is a byte array.
    DT_BOOL tf.bool Boolean.
    DT_COMPLEX64 tf.complex64 Complex number made of two 32 bits floating points: real and imaginary parts.
    DT_COMPLEX128 tf.complex128 Complex number made of two 64 bits floating points: real and imaginary parts.
    DT_QINT8 tf.qint8 8 bits signed integer used in quantized Ops.
    DT_QINT32 tf.qint32 32 bits signed integer used in quantized Ops.
    DT_QUINT8 tf.quint8 8 bits unsigned integer used in quantized Ops.

    2.2 稀疏张量(SparseTensor)

    用于处理高维稀疏数据,包含indices,values,dense_shape三个属性。
    indices:形状为(N, ndims)的Tensor,N为非0元素个数,ndims表示张量阶数
    values:形状为(N)的Tensor,保存indices中指定的非0元素的值
    dense_shape:形状为(ndims)的Tensor,表示该稀疏张量对应稠密张量的形状

    3.Operation

    3.1 Tensor创建函数

    用法 说明
    tf.zeros(shape, dtype=tf.float32, name=None) 创建所有元素设置为零的张量
    tf.zeros_like(tensor, dtype=None, name=None) 返回tensor与所有元素设置为零相同的类型和形状的张量
    tf.ones(shape, dtype=tf.float32, name=None) 创建一个所有元素设置为1的张量。
    tf.ones_like(tensor, dtype=None, name=None) 返回tensor与所有元素设置为1相同的类型和形状的张量
    tf.fill(dims, value, name=None) 创建一个填充了标量值的张量
    tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None) 从截断的正态分布中输出随机值
    tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None) 从正态分布中输出随机值
    tf.random_uniform(shape, minval=0.0, maxval=1.0, dtype=tf.float32, seed=None, name=None) 从均匀分布输出随机值
    tf.eye(num_rows, num_columns=None, batch_shape=None, dtype=tf.float32, name=None) 构建一个单位矩阵, 或者 batch 个矩阵,batch_shape 以 list 的形式传入
    tf.diag(diagonal, name=None) 构建一个对角矩阵
    tf.global_variables_initializer() 初始化全部变量

    3.2 Tensor转换函数

    用法 说明
    tf.random_shuffle(value, seed=None, name=None) 沿其第一维度随机打乱
    tf.set_random_seed(seed) 设置图级随机种子
    tf.string_to_number(string_tensor, out_type=None, name=None) 张量变换
    tf.to_double(x, name='ToDouble') 张量变换
    tf.to_float(x, name='ToFloat') 张量变换
    tf.to_bfloat16(x, name='ToBFloat16') 张量变换
    tf.to_int32(x, name='ToInt32') 张量变换
    tf.to_int64(x, name='ToInt64') 张量变换
    tf.cast(x, dtype, name=None) 张量变换
    tf.shape(input, name=None) 用于确定张量的形状并更改张量的形状
    tf.size(input, name=None) 用于确定张量的形状并更改张量的形状
    tf.rank(input, name=None) 用于确定张量的形状并更改张量的形状
    tf.reshape(tensor, shape, name=None) 用于确定张量的形状并更改张量的形状
    tf.squeeze(input, squeeze_dims=None, name=None) 用于确定张量的形状并更改张量的形状
    tf.expand_dims(input, dim, name=None) 用于确定张量的形状并更改张量的形状
    tf.slice(input_, begin, size, name=None) 切片与扩展
    tf.split(split_dim, num_split, value, name='split') 切片与扩展
    tf.tile(input, multiples, name=None) 切片与扩展
    tf.pad(input, paddings, name=None) 切片与扩展
    tf.concat(concat_dim, values, name='concat') 切片与扩展
    tf.pack(values, name='pack') 切片与扩展
    tf.unpack(value, num=None, name='unpack') 切片与扩展
    tf.reverse_sequence(input, seq_lengths, seq_dim, name=None) 切片与扩展
    tf.reverse(tensor, dims, name=None) 切片与扩展
    tf.transpose(a, perm=None, name='transpose') 切片与扩展
    tf.gather(params, indices, name=None) 切片与扩展
    tf.dynamic_partition(data, partitions, num_partitions, name=None) 切片与扩展
    tf.dynamic_stitch(indices, data, name=None) 切片与扩展

    3.3 逻辑判断

    用法 说明
    tf.logical_and(x, y, name=None) 逻辑运算符
    tf.logical_not(x, name=None) 逻辑运算符
    tf.logical_or(x, y, name=None) 逻辑运算符
    tf.logical_xor(x, y, name='LogicalXor') 逻辑运算符
    tf.equal(x, y, name=None) 比较运算符
    tf.not_equal(x, y, name=None) 比较运算符
    tf.less(x, y, name=None) 比较运算符
    tf.less_equal(x, y, name=None) 比较运算符
    tf.greater(x, y, name=None) 比较运算符
    tf.greater_equal(x, y, name=None) 比较运算符
    tf.select(condition, t, e, name=None) 比较运算符
    tf.where(input, name=None) 比较运算符
    tf.is_finite(x, name=None) 判断检查
    tf.is_inf(x, name=None) 判断检查
    tf.is_nan(x, name=None) 判断检查
    tf.verify_tensor_all_finite(t, msg, name=None) 断言张量不包含任何NaN或Inf 判断检查
    tf.check_numerics(tensor, message, name=None) 判断检查
    tf.add_check_numerics_ops() 判断检查
    tf.Assert(condition, data, summarize=None, name=None) 判断检查
    tf.Print(input_, data, message=None, first_n=None, summarize=None, name=None) 判断检查

    3.4 数学函数

    用法 说明
    tf.add(x, y, name=None) 加法(支持 broadcasting)
    tf.subtract(x, y, name=None)
    tf.multiply(x, y, name=None)
    tf.divide(x, y, name=None)
    tf.mod(x, y, name=None) 取余
    tf.pow(x, y, name=None)
    tf.square(x, name=None) 求平方
    tf.sqrt(x, name=None) 开方
    tf.exp(x, name=None) 自然指数
    tf.log(x, name=None) 自然对数
    tf.negative(x, name=None) 取相反数
    tf.sign(x, name=None) 返回 x 的符号
    tf.reciprocal(x, name=None) 取倒数
    tf.abs(x, name=None) 求绝对值
    tf.round(x, name=None) 四舍五入
    tf.ceil(x, name=None) 向上取整
    tf.floor(x, name=None) 向下取整
    tf.rint(x, name=None) 取最接近的整数
    tf.maximum(x, y, name=None) 返回两tensor中的最大值 (x > y ? x : y)
    tf.minimum(x, y, name=None) 返回两tensor中的最小值 (x < y ? x : y)
    tf.cos(x, name=None) 三角函数和反三角函数
    tf.sin(x, name=None) 三角函数和反三角函数
    tf.tan(x, name=None) 三角函数和反三角函数
    tf.acos(x, name=None) 三角函数和反三角函数
    tf.asin(x, name=None) 三角函数和反三角函数
    tf.atan(x, name=None) 三角函数和反三角函数
    tf.matmul(a,b,name=None) 矩阵乘法(tensors of rank >= 2)
    tf.transpose(a, perm=None, name='transpose') 转置,可以通过指定 perm=[1, 0] 来进行轴变换
    tf.trace(x, name=None) 求矩阵的迹
    tf.matrix_determinant(input, name=None) 计算方阵行列式的值
    tf.matrix_inverse(input, adjoint=None, name=None) 求解可逆方阵的逆
    tf.svd(tensor, name=None) 奇异值分解
    tf.qr(input, full_matrices=None, name=None) QR 分解
    tf.norm(tensor, ord='euclidean', axis=None, keep_dims=False, name=None) 求张量的范数(默认2)

    3.5 聚合相关

    用法 说明
    tf.reduce_sum(input_tensor, axis=None, keep_dims=False, name=None) 计算输入 tensor 所有元素的和,或者计算指定的轴所有元素的和
    tf.reduce_mean(input_tensor, axis=None, keep_dims=False, name=None) 求均值
    tf.reduce_max(input_tensor, axis=None, keep_dims=False, name=None) 求最大值
    tf.reduce_min(input_tensor, axis=None, keep_dims=False, name=None) 求最小值
    tf.reduce_prod(input_tensor, axis=None, keep_dims=False, name=None) 求累乘
    tf.reduce_all(input_tensor, axis=None, keep_dims=False, name=None) 全部满足条件
    tf.reduce_any(input_tensor, axis=None, keep_dims=False, name=None) 至少有一个满足条件

    3.6 序列比较与索引提取

    用法 说明
    tf.setdiff1d(x, y, index_dtype=tf.int32, name=None) 比较两个 list 或者 string 的不同,并返回不同的值和索引
    tf.unique(x, out_idx=None, name=None) 返回 x 中的唯一值所组成的tensor 和原 tensor 中元素在现 tensor 中的索引
    tf.where(condition, x=None, y=None, name=None) x if condition else y, condition 为 bool 类型的
    tf.argmax(input, axis=None, name=None, output_type=tf.int64) 返回沿着坐标轴方向的最大值的索引
    tf.argmin(input, axis=None, name=None, output_type=tf.int64) 返回沿着坐标轴方向的最小值的索引
    tf.invert_permutation(x, name=None) x 的值当作 y 的索引,range(len(x)) 索引当作 y 的值
    tf.edit_distance(x,y) 编辑距离

    4.Graph

    用法 说明
    tf.get_default_graph() 访问默认图
    tf.Graph.seed 此图内使用的随机种子
    tf.Graph.init() 创建一个新的空的图
    tf.Graph.as_default() 返回一个使得当前图成为默认图的上下文管理器
    tf.Graph.as_graph_def(from_version=None, add_shapes=False) 返回一个表示这个图的序列化的 GraphDef。
    tf.Graph.as_graph_element(obj, allow_tensor=True, allow_operation=True) 给定一个obj,看它能否对应到图中的元素
    tf.Graph.get_operation_by_name(name) 根据名字获取某个operation
    tf.Graph.get_tensor_by_name(name) 根据名字获取某个tensor
    tf.Graph.get_operations() 获取所有operations
    tf.Graph.is_feedable(tensor) 判断是否可feed或可fetch
    tf.Graph.is_fetchable(tensor_or_op) 判断是否可feed或可fetch
    tf.Graph.prevent_feeding(tensor) 设置不可feed或不可fetch
    tf.Graph.prevent_fetching(op) 设置不可feed或不可fetch
    tf.Graph.finalize() 结束这个图,使它只读,不能向g添加任何新的操作
    tf.Graph.finalized 如果这个图已经结束,它为真
    tf.Graph.control_dependencies(control_inputs) 返回一个明确控制依赖(control dependencies)的上下文管理器
    tf.Graph.devide(device_name_or_function) 返回一个明确默认设备的使用的上下文管理器
    tf.Graph.name_scope(name) 返回为操作创建分层的上下文管理器
    tf.Graph.add_to_collection(name,value) 将value值存入给定name的collection
    tf.Graph.add_to_collections(names,value) 将value存入给定的names的collections中
    tf.Graph.get_collection(name,scope=None) 返回给定名称集合的值的列表

    5.Session

    用法 说明
    tf.Session()
    tf.InteractiveSession()
    tf.get_default_session() 获取默认session
    tf.Session().graph
    tf.Session(). init(self, target='', graph=None, config=None)
    tf.Session().as_default() 返回使该对象成为默认session的上下文管理器.
    tf.Session().close 关闭这个session
    tf.Session().list_devices() 列出此session中的可用设备.
    tf.Session().run(fetches,feed_dict=None) 执行
    tf.Session().reset(target) 在target上重置资源容器,并关闭所有连接的会话.

    附录

    https://www.jianshu.com/p/55a47b1720ba
    https://www.cnblogs.com/qjoanven/p/7736025.html
    https://blog.csdn.net/xun527/article/details/79690226
    https://blog.bitsrc.io/learn-tensorflow-fundamentals-in-20-minutes-cdef2dec331a
    https://blog.csdn.net/kmsj0x00/article/details/80698794
    https://www.w3cschool.cn/tensorflow_python/tensorflow_python-slp52jz8.html

  • 相关阅读:
    [BJOI2006]狼抓兔子
    hdu 1878 欧拉回路,图的连通性判断
    poj 3844 Divisible Subsequences 剩余类,组合计数
    LA 4609 ,poj 3842 An Industrial Spy
    hdu 4639 2013多校第四场 hehe Fibonacci 数列,组合计数,字符串处理
    hdu 4642 Fliping game 翻硬币游戏 抓住特征变量
    13多校#4 ,组队赛#18 总结
    ACM 大牛的博客
    LA 4329 Ping Pong 2008 北京区域赛 H , BIT 二叉索引树(树状数组)的应用
    poj 2689 Prime Distance 二次筛法,找出给定区间所有约数
  • 原文地址:https://www.cnblogs.com/arachis/p/TF_BASICS.html
Copyright © 2020-2023  润新知