摘要:本文介绍了tensorflow的常用函数。
TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU 或 GPU。一般你不需要显式指定使用 CPU 还是 GPU, TensorFlow 能自动检测。如果检测到 GPU, TensorFlow 会尽可能地利用找到的第一个 GPU 来执行操作. 并行计算能让代价大的算法计算加速执行,TensorFlow也在实现上对复杂操作进行了有效的改进。大部分核相关的操作都是设备相关的实现,比如GPU。下面是一些重要的操作/核:
操作组 | 操作 |
---|---|
Maths | Add, Sub, Mul, Div, Exp, Log, Greater, Less, Equal |
Array | Concat, Slice, Split, Constant, Rank, Shape, Shuffle |
Matrix | MatMul, MatrixInverse, MatrixDeterminant |
Neuronal Network | SoftMax, Sigmoid, ReLU, Convolution2D, MaxPool |
Checkpointing | Save, Restore |
Queues and syncronizations | Enqueue, Dequeue, MutexAcquire, MutexRelease |
Flow control | Merge, Switch, Enter, Leave, NextIteration |
操作 | 描述 |
---|---|
tf.add(x, y, name=None) | 求和 |
tf.sub(x, y, name=None) | 减法 |
tf.mul(x, y, name=None) | 乘法 |
tf.div(x, y, name=None) | 除法 |
tf.mod(x, y, name=None) | 取模 |
tf.abs(x, name=None) | 求绝对值 |
tf.neg(x, name=None) | 取负 (y = -x). |
tf.sign(x, name=None) | 返回符号 y = sign(x) = -1 if x < 0; 0 if x == 0; 1 if x > 0. |
tf.inv(x, name=None) | 取反 |
tf.square(x, name=None) | 计算平方 (y = x * x = x^2). |
tf.round(x, name=None) | 舍入最接近的整数 |
操作 | 描述 |
---|---|
tf.string_to_number (string_tensor, out_type=None, name=None) |
字符串转为数字 |
tf.to_double(x, name=’ToDouble’) | 转为64位浮点类型–float64 |
tf.to_float(x, name=’ToFloat’) | 转为32位浮点类型–float32 |
tf.to_int32(x, name=’ToInt32’) | 转为32位整型–int32 |
tf.to_int64(x, name=’ToInt64’) | 转为64位整型–int64 |
tf.cast(x, dtype, name=None) | 将x或者x.values转换为dtype |
a
is [1.8, 2.2], dtype=tf.float
操作 | 描述 |
---|---|
tf.shape(input, name=None) | 返回数据的shape |
操作 | 描述 |
---|---|
tf.slice(input_, begin, size, name=None) | 对tensor进行切片操作 其中size[i] = input.dim_size(i) - begin[i] 该操作要求 0 <= begin[i] <= begin[i] + size[i] <= Di for i in [0, n] |
操作 | 描述 |
---|---|
tf.diag(diagonal, name=None) | 返回一个给定对角值的对角tensor |
操作 | 描述 |
---|---|
tf.complex(real, imag, name=None) | 将两实数转换为复数形式 |
imag
is [4.75, 5.75]
操作 | 描述 |
---|---|
tf.reduce_sum(input_tensor, reduction_indices=None, keep_dims=False, name=None) |
计算输入tensor元素的和,或者安照reduction_indices指定的轴进行求和 |
b
is [[5, 0], [0, 6]]
操作 | 描述 |
---|---|
tf.segment_sum(data, segment_ids, name=None) | 根据segment_ids的分段计算各个片段的和 其中segment_ids为一个size与data第一维相同的tensor 其中id为int型数据,最大id不大于size c = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8]]) tf.segment_sum(c, tf.constant([0, 0, 1])) ==>[[0 0 0 0] [5 6 7 8]] 上面例子分为[0,1]两id,对相同id的data相应数据进行求和, 并放入结果的相应id中, 且segment_ids只升不降 |
tf.segment_prod(data, segment_ids, name=None) | 根据segment_ids的分段计算各个片段的积 |
tf.segment_min(data, segment_ids, name=None) | 根据segment_ids的分段计算各个片段的最小值 |
tf.segment_max(data, segment_ids, name=None) | 根据segment_ids的分段计算各个片段的最大值 |
tf.segment_mean(data, segment_ids, name=None) | 根据segment_ids的分段计算各个片段的平均值 |
tf.unsorted_segment_sum(data, segment_ids, num_segments, name=None) |
与tf.segment_sum函数类似, 不同在于segment_ids中id顺序可以是无序的 |
tf.sparse_segment_sum(data, indices, segment_ids, name=None) |
输入进行稀疏分割求和 c = tf.constant([[1,2,3,4], [-1,-2,-3,-4], [5,6,7,8]]) |
操作 | 描述 |
---|---|
tf.argmin(input, dimension, name=None) | 返回input最小值的索引index |
tf.argmax(input, dimension, name=None) | 返回input最大值的索引index |
tf.listdiff(x, y, name=None) | 返回x,y中不同值的索引 |
tf.where(input, name=None) | 返回bool型tensor中为True的位置 |
x
is [3, 4, 0, 2, 1]
操作 | 描述 |
---|---|
tf.nn.relu(features, name=None) | 整流函数:max(features, 0) |
tf.nn.relu6(features, name=None) | 以6为阈值的整流函数:min(max(features, 0), 6) |
tf.nn.elu(features, name=None) | elu函数,exp(features) - 1 if < 0,否则features Exponential Linear Units (ELUs) |
tf.nn.softplus(features, name=None) | 计算softplus:log(exp(features) + 1) |
tf.nn.dropout(x, keep_prob, noise_shape=None, seed=None, name=None) |
计算dropout,keep_prob为keep概率 noise_shape为噪声的shape |
tf.nn.bias_add(value, bias, data_format=None, name=None) | 对value加一偏置量 此函数为tf.add的特殊情况,bias仅为一维, 函数通过广播机制进行与value求和, 数据格式可以与value不同,返回为与value相同格式 |
tf.sigmoid(x, name=None) | y = 1 / (1 + exp(-x)) |
tf.tanh(x, name=None) | 双曲线切线激活函数 |
操作 | 描述 |
---|---|
tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None) |
在给定的4D input与 filter下计算2D卷积 输入shape为 [batch, height, width, in_channels] |
tf.nn.conv3d(input, filter, strides, padding, name=None) | 在给定的5D input与 filter下计算3D卷积 输入shape为[batch, in_depth, in_height, in_width, in_channels] |
操作 | 描述 |
---|---|
tf.nn.avg_pool(value, ksize, strides, padding, data_format=’NHWC’, name=None) |
平均方式池化 |
tf.nn.max_pool(value, ksize, strides, padding, data_format=’NHWC’, name=None) |
最大值方法池化 |
tf.nn.max_pool_with_argmax(input, ksize, strides, padding, Targmax=None, name=None) |
返回一个二维元组(output,argmax),最大值pooling,返回最大值及其相应的索引 |
tf.nn.avg_pool3d(input, ksize, strides, padding, name=None) |
3D平均值pooling |
tf.nn.max_pool3d(input, ksize, strides, padding, name=None) |
3D最大值pooling |
操作 | 描述 |
---|---|
tf.nn.l2_normalize(x, dim, epsilon=1e-12, name=None) | 对维度dim进行L2范式标准化 output = x / sqrt(max(sum(x**2), epsilon)) |
tf.nn.sufficient_statistics(x, axes, shift=None, keep_dims=False, name=None) |
计算与均值和方差有关的完全统计量 返回4维元组,*元素个数,*元素总和,*元素的平方和,*shift结果 参见算法介绍 |
tf.nn.normalize_moments(counts, mean_ss, variance_ss, shift, name=None) | 基于完全统计量计算均值和方差 |
tf.nn.moments(x, axes, shift=None, name=None, keep_dims=False) |
直接计算均值与方差 |
操作 | 描述 |
---|---|
tf.nn.l2_loss(t, name=None) | output = sum(t ** 2) / 2 |
操作 | 描述 |
---|---|
tf.nn.sigmoid_cross_entropy_with_logits (logits, targets, name=None)* |
计算输入logits, targets的交叉熵 |
tf.nn.softmax(logits, name=None) | 计算softmax softmax[i, j] = exp(logits[i, j]) / sum_j(exp(logits[i, j])) |
tf.nn.log_softmax(logits, name=None) | logsoftmax[i, j] = logits[i, j] - log(sum(exp(logits[i]))) |
tf.nn.softmax_cross_entropy_with_logits (logits, labels, name=None) |
计算logits和labels的softmax交叉熵 logits, labels必须为相同的shape与数据类型 |
tf.nn.sparse_softmax_cross_entropy_with_logits (logits, labels, name=None) |
计算logits和labels的softmax交叉熵 |
tf.nn.weighted_cross_entropy_with_logits (logits, targets, pos_weight, name=None) |
与sigmoid_cross_entropy_with_logits()相似, 但给正向样本损失加了权重pos_weight |
操作 | 描述 |
---|---|
tf.nn.embedding_lookup (params, ids, partition_strategy=’mod’, name=None, validate_indices=True) |
根据索引ids查询embedding列表params中的tensor值 如果len(params) > 1,id将会安照partition_strategy策略进行分割 1、如果partition_strategy为”mod”, id所分配到的位置为p = id % len(params) 比如有13个ids,分为5个位置,那么分配方案为: [[0, 5, 10], [1, 6, 11], [2, 7, 12], [3, 8], [4, 9]] 2、如果partition_strategy为”div”,那么分配方案为: [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10], [11, 12]] |
tf.nn.embedding_lookup_sparse(params, sp_ids, sp_weights, partition_strategy=’mod’, name=None, combiner=’mean’) |
对给定的ids和权重查询embedding 1、sp_ids为一个N x M的稀疏tensor, N为batch大小,M为任意,数据类型int64 2、sp_weights的shape与sp_ids的稀疏tensor权重, 浮点类型,若为None,则权重为全’1’ |
操作 | 描述 |
---|---|
tf.nn.rnn(cell, inputs, initial_state=None, dtype=None, sequence_length=None, scope=None) |
基于RNNCell类的实例cell建立循环神经网络 |
tf.nn.dynamic_rnn(cell, inputs, sequence_length=None, initial_state=None, dtype=None, parallel_iterations=None, swap_memory=False, time_major=False, scope=None) |
基于RNNCell类的实例cell建立动态循环神经网络 与一般rnn不同的是,该函数会根据输入动态展开 返回(outputs,state) |
tf.nn.state_saving_rnn(cell, inputs, state_saver, state_name, sequence_length=None, scope=None) |
可储存调试状态的RNN网络 |
tf.nn.bidirectional_rnn(cell_fw, cell_bw, inputs, initial_state_fw=None, initial_state_bw=None, dtype=None, sequence_length=None, scope=None) |
双向RNN, 返回一个3元组tuple (outputs, output_state_fw, output_state_bw) |
操作 | 描述 |
---|---|
tf.nn.top_k(input, k=1, sorted=True, name=None) | 返回前k大的值及其对应的索引 |
tf.nn.in_top_k(predictions, targets, k, name=None) | 返回判断是否targets索引的predictions相应的值 是否在在predictions前k个位置中, 返回数据类型为bool类型,len与predictions同 |
对于有巨大量的多分类与多标签模型,如果使用全连接softmax将会占用大量的时间与空间资源,所以采用候选采样方法仅使用一小部分类别与标签作为监督以加速训练。
操作 | 描述 |
---|---|
Sampled Loss Functions | |
tf.nn.nce_loss(weights, biases, inputs, labels, num_sampled, num_classes, num_true=1, sampled_values=None, remove_accidental_hits=False, partition_strategy=’mod’, name=’nce_loss’) |
返回noise-contrastive的训练损失结果 |
tf.nn.sampled_softmax_loss(weights, biases, inputs, labels, num_sampled, num_classes, num_true=1, sampled_values=None, remove_accidental_hits=True, partition_strategy=’mod’, name=’sampled_softmax_loss’) |
返回sampled softmax的训练损失 参考- Jean et al., 2014第3部分 |
Candidate Samplers | |
tf.nn.uniform_candidate_sampler(true_classes, num_true, num_sampled, unique, range_max, seed=None, name=None) |
通过均匀分布的采样集合 返回三元tuple 1、sampled_candidates 候选集合。 2、期望的true_classes个数,为浮点值 3、期望的sampled_candidates个数,为浮点值 |
tf.nn.log_uniform_candidate_sampler(true_classes, num_true, num_sampled, unique, range_max, seed=None, name=None) |
通过log均匀分布的采样集合,返回三元tuple |
tf.nn.learned_unigram_candidate_sampler (true_classes, num_true, num_sampled, unique, range_max, seed=None, name=None) |
根据在训练过程中学习到的分布状况进行采样 返回三元tuple |
tf.nn.fixed_unigram_candidate_sampler(true_classes, num_true, num_sampled, unique, range_max, vocab_file=”, distortion=1.0, num_reserved_ids=0, num_shards=1, shard=0, unigrams=(), seed=None, name=None) |
基于所提供的基本分布进行采样 |
操作 | 描述 |
---|---|
类tf.train.Saver(Saving and Restoring Variables) | |
tf.train.Saver.__init__(var_list=None, reshape=False, sharded=False, max_to_keep=5, keep_checkpoint_every_n_hours=10000.0, name=None, restore_sequentially=False, saver_def=None, builder=None) |
创建一个存储器Saver var_list定义需要存储和恢复的变量 |
tf.train.Saver.save(sess, save_path, global_step=None, latest_filename=None, meta_graph_suffix=’meta’, write_meta_graph=True) |
保存变量 |
tf.train.Saver.restore(sess, save_path) | 恢复变量 |
tf.train.Saver.last_checkpoints | 列出最近未删除的checkpoint 文件名 |
tf.train.Saver.set_last_checkpoints(last_checkpoints) | 设置checkpoint文件名列表 |
tf.train.Saver.set_last_checkpoints_with_time(last_checkpoints_with_time) | 设置checkpoint文件名列表和时间戳 |