TensorFlow当中的张量以及数据类型

一、张量的阶和数据类型

TensorFlow用张量这种数据结构来表示所有的数据.一个张量有一个静态类型和动态类型的维数.张量可以在图中的节点之间流通.其实张量更代表的就是一种多位数组

数组array矩阵ndarray张量tensor

一个二阶张量就是我们平常所说的矩阵,一阶张量可以认为是一个向量.

数学实例Python例子
0纯量(只有大小)s = 483
1向量(大小和方向)v = [1.1, 2.2, 3.3]
2矩阵(数据表)m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
33阶张量(数据立体)t = [[[2], [4], [6]], [[8], [10], [12]], [[14], [16], [18]]]
nn阶(自己想想看)

数据类型

数据类型Python 类型描述
DT_FLOATtf.float3232 位浮点数.
DT_DOUBLEtf.float6464 位浮点数.
DT_INT64tf.int6464 位有符号整型.
DT_INT32tf.int3232 位有符号整型.
DT_INT16tf.int1616 位有符号整型.
DT_INT8tf.int88 位有符号整型.
DT_UINT8tf.uint88 位无符号整型.
DT_STRINGtf.string可变长度的字节数组.每一个张量元素都是一个字节数组.
DT_BOOLtf.bool布尔型.
DT_COMPLEX64tf.complex64由两个32位浮点数组成的复数:实数和虚数.
DT_QINT32tf.qint32用于量化Ops的32位有符号整型.
DT_QINT8tf.qint8用于量化Ops的8位有符号整型.
DT_QUINT8tf.quint8用于量化Ops的8位无符号整型.

二、张量的操作

生成张量

函数用法解释
zeroszeros(shape, dtype=tf.float32, name=None)所有元素为零的张量
zeros_like(tensor, dtype=None, name=None)给tensor定单张量
ones_likeones_like(tensor, dtype=None, name=None)给tensor定单张量
fillfill(dims, value, name=None)填充了标量值的张量
constantconstant(value, dtype=None, shape=None, name=‘Const’)常数张量
t1 = tf.constant([1, 2, 3, 4, 5, 6, 7])
t2 = tf.constant(-1.0, shape=[2, 3])
print(t1,t2)

张量—>名字+形状+类型

创建张量

函数API
truncated_normaltruncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)从截断的正态分布中输出随机值
random_normalrandom_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)从正态分布中输出随机值
random_uniformrandom_uniform(shape, minval=0.0, maxval=1.0, dtype=tf.float32, seed=None, name=None)从均匀分布输出随机值
random_shufflerandom_shuffle(value, seed=None, name=None)沿其第一维度随机打乱
set_random_seedset_random_seed(seed)设置图级随机种子
# 正态分布的 4X4X4 三维矩阵,平均值 0, 标准差 1
normal = tf.truncated_normal([4, 4, 4], mean=0.0, stddev=1.0)

张良的变换

  • 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.string_to_number(string_tensor, out_type=None, name=None)

将输入Tensor中的每个字符串转换为指定的数字类型。注意,int32溢出导致错误,而浮点溢出导致舍入值

n1 = tf.constant(["1234","6789"])
n2 = tf.string_to_number(n1,out_type=tf.types.float32)

sess = tf.Session()

result = sess.run(n2)
print result

sess.close()

形状和变换

  • 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.shape(input, name=None)

返回张量的形状。

t = tf.constant([[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]])
shape(t) -> [2, 2, 3]

静态形状与动态形状

静态维度 是指当你在创建一个张量或者由操作推导出一个张量时,这个张量的维度是确定的。它是一个元祖或者列表。

动态形状 当你在运行你的图时,动态形状才是真正用到的。这种形状是一种描述原始张量在执行过程中的一种张量。如果你定义了一个没有标明具体维度的占位符,即用None表示维度,那么当你将值输入到占位符时,这些无维度就是一个具体的值,并且任何一个依赖这个占位符的变量,都将使用这个值。

APIexp
squeeze(input, squeeze_dims=None, name=None)将input中维度是1的那一维去掉
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)

其他

作用API
张量复制与组合identity(input, name=None)
tuple(tensors, name=None, control_inputs=None)
group(*inputs, \**kwargs)
no_op(name=None)
count_up_to(ref, limit, name=None)
逻辑运算符logical_and(x, y, name=None)
logical_not(x, name=None)
logical_or(x, y, name=None)
logical_xor(x, y, name='LogicalXor')
比较运算符equal(x, y, name=None)
not_equal(x, y, name=None)
less(x, y, name=None)
less_equal(x, y, name=None)
greater(x, y, name=None)
greater_equal(x, y, name=None)
select(condition, t, e, name=None)
where(input, name=None)
判断检查is_finite(x, name=None)
is_inf(x, name=None)
is_nan(x, name=None)
verify_tensor_all_finite(t, msg, name=None) 断言张量不包含任何NaN或Inf
check_numerics(tensor, message, name=None)
add_check_numerics_ops()
Assert(condition, data, summarize=None, name=None)
Print(input_, data, message=None, first_n=None, summarize=None, name=None)

csdn不定期打包发送,微信每日一篇,快乐学习,赢在中国
欢迎大家关注这个微信公众号,尊重原创,转载请注明出处
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值