Tensorflow一些常用基本概念与函数(1)

文章转至

作者:林海山波
出处:https://me.csdn.net/lenbow
版权:本文版权归作者和CSDN博客共有  

写这篇博客只为自己学习路上做个笔记,方便自己学习记忆,大家如果想看详细文章可以去原作者主页去看,同时他的博客中还有很多tensorflow学习知识。感谢林海山波,资料统计的非常全面。

1、tensorflow的基本运作

为了快速的熟悉TensorFlow编程,下面从一段简单的代码开始:

import tensorflow as tf#定义‘符号’变量,也称为占位符a = tf.placeholder("float")b = tf.placeholder("float")y = tf.mul(a, b) #构造一个op节点sess = tf.Session()#建立会话#运行会话,输入数据,并计算节点,同时打印结果print sess.run(y, feed_dict={a: 3, b: 3})# 任务完成, 关闭会话.sess.close()

2、tf函数

TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源(如 CPU 或 GPU。一般你不需要显式指定使用 CPU 还是 GPU, TensorFlow 能自动检测。如果检测到 GPU, TensorFlow 会尽可能地利用找到的第一个 GPU 来执行操作. 并行计算能让代价大的算法计算加速执行,TensorFlow也在实现上对复杂操作进行了有效的改进。大部分核相关的操作都是设备相关的实现,比如GPU。下面是一些重要的操作/核:

操作组操作
MathsAdd, Sub, Mul, Div, Exp, Log, Greater, Less, Equal
ArrayConcat, Slice, Split, Constant, Rank, Shape, Shuffle
MatrixMatMul, MatrixInverse, MatrixDeterminant
Neuronal NetworkSoftMax, Sigmoid, ReLU, Convolution2D, MaxPool
CheckpointingSave, Restore
Queues and syncronizationsEnqueue, Dequeue, MutexAcquire, MutexRelease
Flow controlMerge, Switch, Enter, Leave, NextIteration

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

张量操作Tensor Transformations

操作描述
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
  • 形状操作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()
  • 切片与合并(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.gather
    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)

矩阵相关运算 

操作描述
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]

复数操作

操作描述
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

归约计算(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]

分割(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的分组进行求和

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

操作描述
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的位置
# ‘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]

神经网络(Neural Network)

  • 激活函数(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)双曲线切线激活函数
  • 卷积函数(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]
  • 池化函数(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
  • 数据标准化(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)
直接计算均值与方差
  • 损失函数(Losses)
操作描述
tf.nn.l2_loss(t, name=None)output = sum(t ** 2) / 2
  • 分类函数(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

 

  • 符号嵌入(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’
  • 循环神经网络(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))

  • 求值网络(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同
  • 监督候选采样网络(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)
基于所提供的基本分布进行采样

保存与恢复变量

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

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/540120.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝牙连接不上车要hfp_如何正确使用车载蓝牙播放器呢?

车载蓝牙是以无线蓝牙技术为基础而设计研发的车内无线免提系统。可以连接我们设计进行听歌和打电话十分方便&#xff0c;下面诺金小编带大家一起来看看&#xff01;下面诺金小编带大家一起来看看一、首先是把手机和车载蓝牙播放器打开&#xff0c;搜索车载蓝牙播放器“809”&am…

使用Eclipse+PyDev创建Django项目一windows下

开发条件&#xff1a;eclipsepydev插件django editor插件 关于eclipse安装小编就不多做介绍&#xff0c;我自己用的版本如下 1.安装pydev插件 启动Eclipse, 点击Help->Install New Software 弹出如下框 点击add 分别在 Name中填:Pydev, Location中填http://pydev.org/up…

查询空缺_携程旅行2021校招开启,9大类职位,1000+岗位空缺,本科及以上学历...

携程旅行2021秋季校招正式开启&#xff01;携程集团(纳斯达克股票代码&#xff1a;TCOM)是一家领先的在线旅游服务提供商&#xff0c;旗下品牌包括携程、Trip.com、天巡和去哪儿。携程集团能够整合复杂的旅游相关信息并通过其先进的移动端App、网站以及24小时无间断的免费客户服…

Django web开发笔记

一、Django开发环境搭建&#xff1a; 1.安装python&#xff1a;django可运行于版本python 2.7、3.x 2.安装相应的IDE 3.安装pip&#xff1a;sudo apt-get install python-pip(linux为例&#xff09; 4.安装django&#xff1a;1&#xff09;pip安装&#xff1a;sudo pip ins…

android 前置摄像头预览时 镜像翻转_全面屏时代,原来手机前置摄像头都隐藏着一些缺点,你发现了吗?...

随着真全面屏时代的到来&#xff0c;人们已经不再满足于刘海屏、水滴屏以及挖孔屏等&#xff0c;越来越多的手机厂商和消费者开始追求"100%全面屏"。于是如何解决手机前置摄像头便成了最大的难题&#xff0c;毕竟只要在屏幕上放置摄像头必然会影响屏占比&#xff0c;…

Java 调用 Python 方法学习笔记

文章转载自&#xff1a; 作者&#xff1a;IT_xiao_bai 来源&#xff1a;CSDN 原文&#xff1a;https://blog.csdn.net/IT_xiao_bai/article/details/79074988 前一阵自刚好用python做了一个sae的算法模型&#xff0c;结果公…

Java 调用 Python 方法学习笔记---之---java调用python深度学习模型运算并返回运算结果给前端(2)

上一章写到Java 调用 Python 方法学习的三种方法&#xff0c;这里强调第三种方法。第三种方法本质上和第二种方法是一样的&#xff0c;都是应用到 Runtime.getRuntime().exec() 去执行文件。要深度理解这种方法&#xff0c;首先要先理解一下Runtime.getRuntime().exec() 。 R…

Part 2: Containers

要求 安装了1.13或者更高版本的Docker阅读了Part1中的定位&#xff08;我没写&#xff09;介绍 是时候用Docker构建一个app了。我们会从构建这样一个app的最底层开始&#xff0c;容器——我们这节所介绍的内容。在这层之上是服务&#xff0c;服务定义了容器们的在生产中的行为&…

(论文)WS-DAN (弱监督数据增强)

背景 近期在做外卖分类的项目&#xff0c;外卖分类属于细粒度图像分类&#xff0c;在分类的过程中要从图片的行人中和非机动车中区分出各类外卖&#xff08;主要是美团、饿了吗&#xff09;。刚好近期发现了一片关于细粒度图像分类较新的论文&#xff08;See Better Before Lo…

罗马音平假名片假名转换器_关于五十音你所要知道的一切!文末附日网高清字帖...

今天开始&#xff0c;木子小花日本语教室将开始同时更新日语文法系列文章 和 日语真题详解系列文章&#xff0c;从五十音图的记忆方法到日语助词的用法整理&#xff0c;从N5的简单句子构成到N1复杂文法的接续记忆方法&#xff0c;力求做出全知乎&#xff08;小声&#xff1a;全…

django的web开发笔记1(智能诊断系统数据概览记录)

接于上一篇&#xff0c;这一篇主要记录如何链接mysql数据库以及从数据库中调用数据信息到页面&#xff0c;同时包含百度地图api的一些使用。 其中包括模块&#xff0c;echert图表绘制数据调用&#xff0c;百度地图数据信息调用以及一些单机效果&#xff0c;页面数据调用等。 1…

左右xcode的重构选项的一些理解

Rename(重命名):对标示符进行重命名,以获得更好的代码可读性,这些标示符包含类,方法或者函数的名称. Extract(抽取):将你在XCode种选择的代码抽取到一个新的方法或函数中. Create SuperClass(创建父类):为Xcode中当前所选的类定义父类 Move Up(上移):将所选择的方法,属性,或实例…

window 如何查看tomcat 实时日志_如何处理生产环境Tomcat的catalina.out日志?

前语&#xff1a;不要为了读文章而读文章&#xff0c;一定要带着问题来读文章&#xff0c;勤思考。作者&#xff1a;jmcui 来源&#xff1a;http://1t.click/x4q# 前言随着每天业务的增长&#xff0c;Tomcat 的catalina.out日志 变得越来越大&#xff0c;占用磁盘空间不说。要…

paddlepaddle测试安装_百度paddlepaddle深度学习7日入门-CV疫情特辑心得

正值疫情严重之日&#xff0c;作为一名研究生被迫待在家里学习&#xff0c;手头的科研项目也严重受挫。。。偶然间&#xff0c;看到微信公众号发布这门课&#xff0c;马上报名&#xff0c;入坑&#xff01;&#xff01;&#xff01;瞬间疫情其间有学习的目标了。。该课程学习依…

apache目录 vscode_VsCode搭建Java开发环境(Spring Boot项目创建、运行、调试)

VsCode搭建Java开发环境(Spring Boot项目创建、运行、调试)安装如下两个主要扩展即可&#xff0c;这两个扩展已关联java项目开发主要使用的maven、springboot等所需要的扩展。开始步骤&#xff1a;在 Visual Studio Code 中打开扩展视图(CtrlShiftX)。输入“java”搜索商店扩展…

android dp转px的公式_Android特效专辑——自定义不一样的Toast

大家都知道&#xff0c;Android的控件有时候很难满足我们的需求&#xff0c;所以我们需要自定义View。自定义的方式很多&#xff0c;有继承原生控件也有直接自定义View的&#xff0c;今天写的是自定义的Toast&#xff0c;当然&#xff0c;这个不是复写Toast,是换一种表达形式&a…

code iban 是有什么组成_深入浅出Zookeeper(四):客户端的请求在服务器中经历了什么...

作者 泊浮目 沃趣科技高级研发工程师出品 沃趣科技1. 前言当我们向zk发出一个数据更新请求时&#xff0c;这个请求的处理流程是什么样的&#xff1f;zk又是使用了什么共识算法来保证一致性呢&#xff1f;带着这些问题&#xff0c;我们进入今天的正文。2. 设计模式&#xff1…

启动activemq_「Java」 - SpringBoot amp; ActiveMQ

一、消息队列消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合、异步消息、流量削锋等问题&#xff0c;实现高性能、高可用、可伸缩和最终一致性架构&#xff0c;是大型分布式系统不可缺少的中间件。目前在生产环境中使用较多的消息队列有ActiveMQ、Rabbit…

永不休眠怎么设置_电脑休眠后应该怎样唤醒?

可能有朋友会碰到这种情况&#xff0c;电脑屏幕显示正在休眠&#xff0c;而且不停的转圈&#xff0c;这是怎么回事&#xff0c;如何唤醒?下面让坚哥为大家分析一下吧。电脑开机显示休眠一般根据以下几种情况进行处理&#xff1a;1、正常电脑休眠&#xff1a;一般的是按一下电源…

配置ssl证书_Mysql配置ssl证书

本环境基于mysql5.6配置&#xff0c;通过openssl生成证书进行配置一、确认环境信息1、查看数据库版本mysql> select version();-----------| version() |-----------| 5.6.36 |-----------2、查看数据库是否支持ssl配置mysql> show variables like have%ssl%;-----------…