并行计算能让代价大的算法计算加速执行,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

1 、算术操作

TensorFlow的算术操作如下:

操作

描述

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)

舍入最接近的整数
# ‘a’ is [0.9, 2.5, 2.3, -4.4]
tf.round(a) ==> [ 1.0, 3.0, 2.0, -4.0 ]

tf.sqrt(x, name=None)

开根号 (y = \sqrt{x}
= x^{1/2}).

tf.pow(x, y, name=None)

幂次方 
# tensor ‘x’ is [[2, 2], [3, 3]]
# tensor ‘y’ is [[8, 16], [2, 3]]
tf.pow(x, y) ==> [[256, 65536], [9, 27]]

tf.exp(x, name=None)

计算e的次方

tf.log(x, name=None)

计算log,一个输入计算e的ln,两输入以第二

输入为底

tf.maximum(x, y, name=None)

返回最大值 (x > y ? x
: y)

tf.minimum(x, y, name=None)

返回最小值 (x < y ? x
: y)

tf.cos(x, name=None)

三角函数cosine

tf.sin(x, name=None)

三角函数sine

tf.tan(x, name=None)

三角函数tan

tf.atan(x, name=None)

三角函数ctan

2、张量操作Tensor Transformations

2.1 数据类型转换Casting

操作

描述

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
# tensor a is [1.8,
2.2], dtype=tf.float
tf.cast(a, tf.int32) ==> [1, 2] # dtype=

tf.int32

tf.equal(x, y, name=None)

判断两个tensor是否每个元素都相等。

返回一个格式为bool的tensor

A = [[1,3,4,5,6]],B =
[[1,3,4,3,2]]

tf.equal(A, B) ==>

[[ True  True 
True False False]]

2.2 形状操作Shapes and Shaping

操作

描述

tf.shape(input, name=None)

返回数据的shape
# ‘t’ is [[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]]
shape(t) ==> [2, 2, 3]

tf.size(input, name=None)

返回数据的元素数量
# ‘t’ is [[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]]]
size(t) ==> 12

tf.rank(input, name=None)

返回tensor的rank
注意:此rank不同于矩阵的rank,
tensor的rank表示一个tensor需要的索引数目

来唯一表示任何一个元素
也就是通常所说的 “order”, “degree”或”

ndims”
#’t’ is [[[1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4]]]
# shape of tensor ‘t’ is [2, 2, 3]
rank(t) ==> 3

tf.reshape(tensor, shape, name=None)

改变tensor的形状
# tensor ‘t’ is [1, 2, 3, 4, 5, 6, 7, 8, 9]
# tensor ‘t’ has shape [9]
reshape(t, [3, 3]) ==> 
[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
#如果shape有元素[-1],表示在该维度打平

至一维
# -1 将自动推导得为 9:
reshape(t, [2, -1]) ==> 
[[1, 1, 1, 2, 2, 2, 3, 3, 3],
[4, 4, 4, 5, 5, 5, 6, 6, 6]]

tf.expand_dims(input, dim, name=None)

插入维度1进入一个tensor中
#该操作要求-1-input.dims()
# ‘t’ is a tensor of shape [2]
shape(expand_dims(t, 0)) ==> [1, 2]
shape(expand_dims(t, 1)) ==> [2, 1]
shape(expand_dims(t, -1)) ==> [2, 1]

<= dim <= input.dims()

2.3 切片与合并(Slicing and Joining)

操作

描述

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]
#’input’ is 
#[[[1, 1, 1], [2, 2, 2]],[[3, 3, 3], [4, 4, 4]],[[5, 5, 5],

[6, 6, 6]]]
tf.slice(input, [1, 0, 0], [1, 1, 3]) ==> [[[3, 3, 3]]]
tf.slice(input, [1, 0, 0], [1, 2, 3]) ==> 
[[[3, 3, 3],
[4, 4, 4]]]
tf.slice(input, [1, 0, 0], [2, 1, 3]) ==> 
[[[3, 3, 3]],
[[5, 5, 5]]]

tf.split(split_dim, num_split, value,
name=’split’)

沿着某一维度将tensor分离为num_split
tensors
# ‘value’ is a tensor with shape [5, 30]
# Split ‘value’ into 3 tensors along dimension 1
split0, split1, split2 = tf.split(1, 3, value)
tf.shape(split0) ==> [5, 10]

tf.concat(concat_dim, values,
name=’concat’)

沿着某一维度连结tensor
t1 = [[1, 2, 3], [4, 5, 6]]
t2 = [[7, 8, 9], [10, 11, 12]]
tf.concat(0, [t1, t2]) ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9],

[10, 11, 12]]
tf.concat(1, [t1, t2]) ==> [[1, 2, 3, 7, 8, 9], [4, 5, 6, 10,

11, 12]]
如果想沿着tensor一新轴连结打包,那么可以:
tf.concat(axis, [tf.expand_dims(t, axis) for t in

tensors])
等同于tf.pack(tensors, axis=axis)

tf.pack(values, axis=0, name=’pack’)

将一系列rank-R的tensor打包为一个rank-(R+1)的

tensor
# ‘x’ is [1, 4], ‘y’ is [2, 5], ‘z’ is [3, 6]
pack([x, y, z]) => [[1, 4], [2, 5], [3, 6]] 
# 沿着第一维pack
pack([x, y, z], axis=1) => [[1, 2, 3], [4, 5, 6]]
等价于tf.pack([x, y, z]) = np.asarray([x, y,
z])

tf.reverse(tensor, dims, name=None)

沿着某维度进行序列反转
其中dim为列表,元素为bool型,size等于

rank(tensor)
# tensor ‘t’ is 
[[[[ 0, 1, 2, 3],
#[ 4, 5, 6, 7],

#[ 8, 9, 10, 11]],
#[[12, 13, 14, 15],
#[16, 17, 18, 19],
#[20, 21, 22, 23]]]]
# tensor ‘t’ shape is [1, 2, 3, 4]
# ‘dims’ is [False, False, False, True]
reverse(t, dims) ==>
[[[[ 3, 2, 1, 0],
[ 7, 6, 5, 4],
[ 11, 10, 9, 8]],
[[15, 14, 13, 12],
[19, 18, 17, 16],
[23, 22, 21, 20]]]]

tf.transpose(a, perm=None,
name=’transpose’)

调换tensor的维度顺序
按照列表perm的维度排列调换tensor顺序,
如为定义,则perm为(n-1…0)
# ‘x’ is [[1 2 3],[4 5 6]]
tf.transpose(x) ==> [[1 4], [2 5],[3 6]]
# Equivalently
tf.transpose(x, perm=[1, 0]) ==> [[1 4],[2 5], [3 6]]

tf.gather(params, indices,
validate_indices=None, name=None)

合并索引indices所指示params中的切片

tf.one_hot
(indices, depth, on_value=None, off_value=None, 
axis=None, dtype=None, name=None)

indices = [0, 2, -1, 1]
depth = 3
on_value = 5.0 
off_value = 0.0 
axis = -1 
#Then output is [4 x 3]: 
output = 
[5.0 0.0 0.0] // one_hot(0) 
[0.0 0.0 5.0] // one_hot(2) 
[0.0 0.0 0.0] // one_hot(-1) 
[0.0 5.0 0.0] // one_hot(1)

3、矩阵相关运算

操作

描述

tf.diag(diagonal, name=None)

返回一个给定对角值的对角tensor
# ‘diagonal’ is [1, 2, 3, 4]
tf.diag(diagonal) ==> 
[[1, 0, 0, 0]
[0, 2, 0, 0]
[0, 0, 3, 0]
[0, 0, 0, 4]]

tf.diag_part(input, name=None)

功能与上面相反

tf.trace(x, name=None)

求一个2维tensor足迹,即对角值diagonal

之和

tf.transpose(a, perm=None,
name=’transpose’)

调换tensor的维度顺序
按照列表perm的维度排列调换tensor顺序,
如为定义,则perm为(n-1…0)
# ‘x’ is [[1 2 3],[4 5 6]]
tf.transpose(x) ==> [[1 4], [2 5],[3 6]]
# Equivalently
tf.transpose(x, perm=[1, 0]) ==> [[1 4],[2 5],

[3 6]]

tf.matmul(a, b,
transpose_a=False, 
transpose_b=False, a_is_sparse=False, 
b_is_sparse=False, name=None)

矩阵相乘

tf.matrix_determinant(input,
name=None)

返回方阵的行列式

tf.matrix_inverse(input, adjoint=None,
name=None)

求方阵的逆矩阵,adjoint为True时,计算输入

共轭矩阵的逆矩阵

tf.cholesky(input, name=None)

对输入方阵cholesky分解,
即把一个对称正定的矩阵表示成一个下三角矩阵

L和其转置的乘积的分解A=LL^T

tf.matrix_solve(matrix, rhs,
adjoint=None, name=None)

求解tf.matrix_solve(matrix,
rhs, adjoint=None,

name=None)
matrix为方阵shape为[M,M],rhs的shape为

[M,K],output为[M,K]

4、复数操作

操作

描述

tf.complex(real, imag, name=None)

将两实数转换为复数形式
# tensor ‘real’ is [2.25, 3.25]
# tensor imag is
[4.75, 5.75]
tf.complex(real, imag) ==> [[2.25 + 4.75j],

[3.25 + 5.75j]]

tf.complex_abs(x, name=None)

计算复数的绝对值,即长度。
# tensor ‘x’ is [[-2.25 + 4.75j], [-3.25 + 5.75j]]
tf.complex_abs(x) ==> [5.25594902, 6.60492229]

tf.conj(input, name=None)

计算共轭复数

tf.imag(input, name=None)
tf.real(input, name=None)

提取复数的虚部和实部

tf.fft(input, name=None)

计算一维的离散傅里叶变换,输入数据类型为complex64

5、归约计算(Reduction)

操作

描述

tf.reduce_sum(input_tensor,
reduction_indices=None, 
keep_dims=False, name=None)

计算输入tensor元素的和,或者安照reduction_indices

指定的轴进行求和
# ‘x’ is [[1, 1, 1]
# [1, 1, 1]]
tf.reduce_sum(x) ==> 6
tf.reduce_sum(x, 0) ==> [2, 2, 2]
tf.reduce_sum(x, 1) ==> [3, 3]
tf.reduce_sum(x, 1, keep_dims=True) ==> [[3], [3]]
tf.reduce_sum(x, [0, 1]) ==> 6

tf.reduce_prod(input_tensor, 
reduction_indices=None, 
keep_dims=False, name=None)

计算输入tensor元素的乘积,或者安照reduction_indices

指定的轴进行求乘积

tf.reduce_min(input_tensor, 
reduction_indices=None, 
keep_dims=False, name=None)

求tensor中最小值

tf.reduce_max(input_tensor, 
reduction_indices=None, 
keep_dims=False, name=None)

求tensor中最大值

tf.reduce_mean(input_tensor, 
reduction_indices=None, 
keep_dims=False, name=None)

求tensor中平均值

tf.reduce_all(input_tensor, 
reduction_indices=None, 
keep_dims=False, name=None)

对tensor中各个元素求逻辑’与’
# ‘x’ is 
# [[True, True]
# [False, False]]
tf.reduce_all(x) ==> False
tf.reduce_all(x, 0) ==> [False, False]
tf.reduce_all(x, 1) ==> [True, False]

tf.reduce_any(input_tensor, 
reduction_indices=None, 
keep_dims=False, name=None)

对tensor中各个元素求逻辑’或’

tf.accumulate_n(inputs,
shape=None, 
tensor_dtype=None, name=None)

计算一系列tensor的和
# tensor ‘a’ is [[1, 2], [3, 4]]
# tensor b is [[5,
0], [0, 6]]
tf.accumulate_n([a, b, a]) ==> [[7, 4], [6, 14]]

tf.cumsum(x, axis=0,
exclusive=False, 
reverse=False, name=None)

求累积和
tf.cumsum([a, b, c]) ==> [a, a + b, a + b + c]
tf.cumsum([a, b, c], exclusive=True) ==> [0, a, a + b]
tf.cumsum([a, b, c], reverse=True) ==> [a + b + c, b +

c, c]
tf.cumsum([a, b, c], exclusive=True, reverse=True) ==>

[b + c, c, 0]

6、分割(Segmentation)

操作

描述

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]])
# Select two rows, one segment.
tf.sparse_segment_sum(c, tf.constant([0, 1]),

tf.constant([0, 0])) ==> [[0 0
0 0]]
对原data的indices为[0,1]位置的进行分割,
并按照segment_ids的分组进行求和

7、序列比较与索引提取(Sequence Comparison and Indexing)

操作

描述

tf.argmin(input, dimension, name=None)

返回input最小值的索引index

tf.argmax(input, dimension, name=None)

返回input最大值的索引index

dimension指定轴方向

tf.listdiff(x, y, name=None)

返回x,y中不同值的索引

tf.where(input, name=None)

返回bool型tensor中为True的位置
# ‘input’ tensor is 
#[[True, False]
#[True, False]]
# ‘input’ 有两个’True’,那么输出两个坐标值.
# ‘input’的rank为2, 所以每个坐标为具有两个维度.
where(input) ==>
[[0, 0],
[1, 0]]

tf.unique(x, name=None)

返回一个元组tuple(y,idx),y为x的列表的唯一化数据列表,
idx为x数据对应y元素的index
# tensor ‘x’ is [1, 1, 2, 4, 4, 4, 7, 8, 8]
y, idx = unique(x)
y ==> [1, 2, 4, 7, 8]
idx ==> [0, 0, 1, 2, 2, 2, 3, 4, 4]

tf.invert_permutation(x, name=None)

置换x数据与索引的关系
# tensor x is [3,
4, 0, 2, 1]
invert_permutation(x) ==> [2, 4, 3, 0, 1]

8、神经网络(Neural Network)

8.1 激活函数(Activation Functions)

操作

描述

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)

双曲线切线激活函数

8.2 卷积函数(Convolution)

操作

描述

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]

8.3 池化函数(Pooling)

操作

描述

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

8.4 数据标准化(Normalization)

操作

描述

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)

直接计算均值与方差

8.5 损失函数(Losses)

操作

描述

tf.nn.l2_loss(t, name=None)

output = sum(t ** 2) / 2

8.6 分类函数(Classification)

操作

描述

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

8.7 符号嵌入(Embeddings)

操作

描述

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’

8.8 循环神经网络(Recurrent Neural Networks)

操作

描述

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.rnn简要介绍— 
cell: 一个RNNCell实例 
inputs: 一个shape为[batch_size, input_size]的tensor 
initial_state: 为RNN的state设定初值,可选 
sequence_length:制定输入的每一个序列的长度,size为[batch_size],值范围为[0, T)的int型数据 
其中T为输入数据序列的长度 

@针对输入batch中序列长度不同,所设置的动态计算机制 
@对于在时间t,和batch的b行,有 
(output, state)(b, t) = ? (zeros(cell.output_size), states(b,
sequence_length(b) - 1)) : cell(input(b, t), state(b, t - 1))

8.9 求值网络(Evaluation)

操作

描述

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同

8.10 监督候选采样网络(Candidate Sampling)

对于有巨大量的多分类与多标签模型,如果使用全连接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)

基于所提供的基本分布进行采样

9、保存与恢复变量

操作

描述

类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文件名列表和时间戳

梯度计算

移动平均(Moving Averages)

一些训练优化算法,比如GradientDescent
和Momentum 在优化过程中便可以使用到移动平均方法。使用移动平均常常可以较明显地改善结果。

操作

描述

class
tf.train.ExponentialMovingAverage

将指数衰退加入到移动平均中

tf.train.ExponentialMovingAverage.apply(var_list=None)

对var_list变量保持移动平均

tf.train.ExponentialMovingAverage.average_name(var)

返回var均值的变量名称

tf.train.ExponentialMovingAverage.average(var)

返回var均值变量

tf.train.ExponentialMovingAverage.variables_to_restore(moving_avg_variables=None)

返回用于保存的变量名称的映射

tensorflow函数(2)的更多相关文章

  1. Tensorflow函数——tf.variable_scope()

    Tensorflow函数——tf.variable_scope()详解 https://blog.csdn.net/yuan0061/article/details/80576703 2018年06月 ...

  2. tensorflow函数解析:Session.run和Tensor.eval的区别

    tensorflow函数解析:Session.run和Tensor.eval 翻译 2017年04月20日 15:05:50 标签: tensorflow / 机器学习 / 深度学习 / python ...

  3. tensorflow函数/重要功能实现

    一.基础函数 1.1 .tf.reduce_sum(input_tensor, axis)   Computes the sum of elements across dimensions of a ...

  4. TensorFlow函数:tf.reduce_sum

    tf.reduce_sum 函数 reduce_sum ( input_tensor , axis = None , keep_dims = False , name = None , reducti ...

  5. TensorFlow函数教程:tf.nn.dropout

    tf.nn.dropout函数 tf.nn.dropout( x, keep_prob, noise_shape=None, seed=None, name=None ) 定义在:tensorflow ...

  6. TensorFlow函数:tf.random_shuffle

    tf.random_shuffle 函数 random_shuffle( value, seed=None, name=None ) 定义在:tensorflow/python/ops/random_ ...

  7. TensorFlow函数:tf.truncated_normal

    tf.truncated_normal函数 tf.truncated_normal( shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, ...

  8. TensorFlow函数:tf.ones_like

    tf.ones_like 函数 ones_like( tensor, dtype=None, name=None, optimize=True ) 定义在:tensorflow/python/ops/ ...

  9. TensorFlow函数:tf.ones

    tf.ones 函数 ones( shape, dtype=tf.float32, name=None ) 定义于:tensorflow/python/ops/array_ops.py. 请参阅指南: ...

  10. TensorFlow函数:tf.zeros_like

    tf.zeros_like函数 tf.zeros_like( tensor, dtype=None, name=None, optimize=True ) 定义在:tensorflow/python/ ...

随机推荐

  1. 4 vuex的安装

    安装可以看,引入又问题https://blog.csdn.net/u014196765/article/details/78022065?locationNum=9&fps=1(引入) htt ...

  2. Dos命令大全完整版

    DOS(磁盘操作系统)命令,是DOS操作系统的命令,是一种面向磁盘的操作命令,主要包括目录操作类命令.磁盘操作类命令.文件操作类命令和其它命令. 使用技巧 DOS命令不区分大小写,比如C盘的Progr ...

  3. 【模板】Kruskal

    int n, m; struct Edge { int u, v, w; }a[MAX_M]; // 令a关于w升序排列 int r[MAX_N]; // 并查集 int Find(int x) { ...

  4. BZOJ2568 比特集合(树状数组)

    考虑维护f[k][x]表示“最低k位所表示的数不大于x”的数的个数.那么查询时答案就为f[k][2k-1]-f[k][2k-1-1]. 同时记录每个数在集合中出现多少次.这样的话插入.删除已经解决了, ...

  5. SSH协议详解

    简介 SSH只是一个协议,基于这个协议有不同的实现,这些实现中有开源,也有收费. 原理 普通网络通信一般是明文通信,数据容易被中间人拦截并且解析,而SSH协议则提供了基于内容加密服务. 流程: 第一种 ...

  6. hadoop2相对hadoop1有非常重大的改进

    hadoop2相对hadoop1有非常重大的改进. 下面看一下在HDFS和MapReduce方面的改进: HDFS Federation(HDFS联邦)federation-background[1] ...

  7. 【Revit API】改变填充区域的填充样式

    话不多说,直接上代码 var target = pattern.Target; var name = pattern.Name; var fpElem = FillPatternElement.Get ...

  8. 【bzoj1030】 JSOI2007—文本生成器

    http://www.lydsy.com/JudgeOnline/problem.php?id=1030 (题目链接) 题意 给出$n$个单词,问有多少个长度为$m$的文本中至少包含一个单词. Sol ...

  9. c++并发编程之互斥锁(mutex)的使用方法

    1. 多个线程访问同一资源时,为了保证数据的一致性,最简单的方式就是使用 mutex(互斥锁). 引用 cppreference 的介绍: The mutex class is a synchroni ...

  10. MySQL的replace方法

    mysql中replace函数直接替换mysql数据库中某字段中的特定字符串,不再需要自己写函数去替换,用起来非常的方便,mysql 替换函数replace()Update `table_name` ...