文章目录
1. tf.parse_single_example()函数
tf.parse_single_example(
serialized,
features,
name=None,
example_names=None
)
定义于:tensorflow/python/ops/parsing_ops.py。
解析一个Example原型。
类似于parse_example,除了:
对于稠密型Tensor,返回的Tensor与parse_example的输出相同。除了没有batch的维度,输出的形状与dense_shape中给定的形状相同。
对于稀疏型Tensor,删除了索引矩阵的第一(batch)列,值向量不变,并且形状向量的第一(batch_size)条目被删除(它现在是单个元素向量)。
人们可能会通过使用parse_example批处理Example原型而不是直接使用此函数来获取性能上的优势。
参数:
serialized:标量字符串Tensor,单个序列化Example。
features:字典映射到FixedLenFeature或者VarLenFeature的值。
name:此操作的名称(可选)。
example_names:(可选)标量字符串Tensor,关联名称。
返回:
字典映射特征键值对到Tensor或者SparseTensor。
2. tf.decode_raw()
tf.decode_raw函数的意思是将原来编码为字符串类型的变量重新变回来,这个方法在数据集dataset中很常用,因为制作图片源数据一般写进tfrecord里用to_bytes的形式,也就是字符串。这里将原始数据取出来,必须制定原始数据的格式,原始数据是什么格式这里解析必须是什么格式,要不然会出现形状的不对应问题!例如元数据是tf.float64然后to_bytes,但是用tf.decode_raw解析的时候使用了tf.float32,那么形状跟值都会跟原始数据有差别,后面传入网络的时候一定会报tensorflow : Input to reshape is a tensor with 16384 values, but the requested shape has 49152 这种错误。
tf.decode_raw(
bytes,
out_type,
little_endian=True,
name=None
)
将字符串的字节重新解释为数字向量。
参数:
bytes: 字符串类型的张量。所有元素的长度必须相同。
out_type: 来自tf.half,tf.float32,tf.float64,tf.int32,tf.uint16,tf.uint8,tf.int16,tf.int8,tf.int64的tf.DType。
little_endian: 一个可选的bool。默认值为True。输入字节是否按little-endian顺序排列。对于存储在单个字节(如uint8)中的out_type值,将忽略。
name: 操作的名称(可选)。
返回值:
类型为out_type的张量。
3. tf.reshape()
reshape(
tensor,
shape,
name=None
)
重塑张量,给定tensor,这个操作返回一个张量,它与带有形状shape的tensor具有相同的值。
参数:
tensor:一个Tensor
shape:一个Tensor;必须是以下类型之一:int32,int64;用于定义输出张量的形状
name:操作的名称(可选)
返回值:
该操作返回一个张量,与tensor具有相同的类型.
如果shape的一个分量是特殊值-1,则计算该维度的大小,以使总大小保持不变。特别地情况为,一个[-1]维的shape变平成1维。至多能有一个shape的分量可以是-1。如果shape是1-D或更高,则操作返回形状为shape的张量,其填充为tensor的值。在这种情况下,隐含的shape元素数量必须与tensor元素数量相同。
4. tf.cast()数据类型转换
tf.cast()函数的作用是执行 tensorflow 中张量数据类型转换,比如读入的图片如果是int8类型的,一般在要在训练前把图像的数据格式转换为float32。
cast定义:
cast(x, dtype, name=None)
第一个参数 x: 待转换的数据(张量)
第二个参数 dtype: 目标数据类型
第三个参数 name: 可选参数,定义操作的名称
5. tf.clip_by_value()
tf.clip_by_value(v,a,b)
功能:可以将一个张量中的数值限制在一个范围之内。(可以避免一些运算错误)
参数:(1)v:input数据(2)a、b是对数据的限制。
当v小于a时,输出a;
当v大于a小于b时,输出原值;
当v大于b时,输出b;
例子:
import tensorflow as tf
v=tf.constant([[1.0,2.0,3.0],[4.0,5.0,6.0]])
sess=tf.Session()
with sess.as_default():
print(tf.clip_by_value(v,2.5,4.5).eval())
结果:
[[ 2.5 2.5 3. ]
[ 4. 4.5 4.5]]
6. 查看CPU内存及GPU使用情况
1) 单独查看CPU内存使用情况的命令:free -m
2) 查看GPU
使用 nvidia-smi 命令
$ nvidia-smi
但是这个命令只能显示一次,如果要实时显示,配合watch命令, 让一秒刷新一次
$ watch -n 1 nvidia-smi
显卡性能测试工具
sudo apt install mesa-utils
glxgears
7. tf.split()函数的用法
在tensorflow 的代码里经常看到tf.split()这个函数,今天来扒一扒这个API的用法
tf.split(
value,
num_or_size_splits,
axis=0,
num=None,
name=‘split’
)
根据官方文档的说法这个函数的用途简单说就是把一个张量划分成几个子张量。
value:准备切分的张量
num_or_size_splits:准备切成几份
axis : 准备在第几个维度上进行切割
其中分割方式分为两种
- 如果num_or_size_splits 传入的 是一个整数,那直接在axis=D这个维度上把张量平均切分成几个小张量
- 如果num_or_size_splits 传入的是一个向量(这里向量各个元素的和要跟原本这个维度的数值相等)就根据这个向量有几个元素分为几项)
举个例子张量为(5, 30)
这个时候5是axis=0, 30是axis=1,如果要在axis=1这个维度上把这个张量拆分成三个子张量
传入向量时
split0, split1, split2 = tf.split(value, [4, 15, 11], 1)
tf.shape(split0) # [5, 4]
tf.shape(split1) # [5, 15]
tf.shape(split2) # [5, 11]
传入整数时
split0, split1, split2 = tf.split(value, num_or_size_splits=3, axis=1)
tf.shape(split0) # [5, 10]
7. Linux统计文件个数
find ./ -name *.png | wc -l
8. linux查看图片
eog *