sample_prob函数解读

  1. # Generate the sample probability
  2. def sample_prob(self, probs):
  3. return tf.nn.relu(tf.sign(probs - tf.random_uniform(tf.shape(probs))))

**

tf.random_uniform函数:

  1. random_uniform(
  2. shape,
  3. minval=0,
  4. maxval=None,
  5. dtype=tf.float32,
  6. seed=None,
  7. name=None
  8. )

从均匀分布中输出随机值.
生成的值在该 [minval, maxval) 范围内遵循均匀分布.下限 minval 包含在范围内,而上限 maxval 被排除在外.
对于浮点数,默认范围是 [0, 1).对于整数,至少 maxval 必须明确地指定.
在整数情况下,随机整数稍有偏差,除非 maxval - minval 是 2 的精确幂.对于maxval - minval 的值,偏差很小,明显小于输出(232 或者 264)的范围.
参数:

  • shape:一维整数张量或 Python 数组.输出张量的形状.
  • minval:dtype 类型的 0-D 张量或 Python 值;生成的随机值范围的下限;默认为0.
  • maxval:dtype 类型的 0-D 张量或 Python 值.要生成的随机值范围的上限.如果 dtype 是浮点,则默认为1 .
  • dtype:输出的类型:float16、float32、float64、int32、orint64.
  • seed:一个 Python 整数.用于为分布创建一个随机种子.查看 tf.set_random_seed 行为.
  • name:操作的名称(可选).

返回:
用于填充随机均匀值的指定形状的张量.
可能引发的异常:

  • ValueError:如果 dtype 是整数并且 maxval 没有被指定.

tf.sign函数:

  1. sign(
  2. x,
  3. name=None
  4. )

返回一个数字符号的元素指示.
如果x < 0,则有 y = sign(x) = -1;如果x == 0,则有 0 或者tf.is_nan(x);如果x > 0,则有1.
对于NaN输入返回零.
对于复杂的数字,如果x != 0,则有y = sign(x) = x / |x|,否则y = 0.
参数:

  • x:一个Tensor或SparseTensor.必须是下列类型之一:half,float32,float64,int32,int64,complex64,complex128.
  • name:操作的名称(可选).

返回:
tf.sign函数返回Tensor或者SparseTensor,它们都与x有相同的类型.

tf.nn.relu函数:

  1. tf.nn.relu(
  2. features,
  3. name=None
  4. )

计算校正线性:max(features, 0).
参数:

  • features:一个Tensor.必须是下列类型之一:float32,float64,int32,uint8,int16,int8,int64,bfloat16,uint16,half,uint32,uint64.
  • name:操作的名称(可选).

返回:
一个Tensor,与features具有相同的类型.

prob_h_given_v和prob_v_given_h函数解读

  1. # Fits the result from the weighted visible layer plus the bias into a sigmoid curve
  2. def prob_h_given_v(self, visible, w, hb):
  3. # Sigmoid
  4. return tf.nn.sigmoid(tf.matmul(visible, w) + hb)
  5. # Fits the result from the weighted hidden layer plus the bias into a sigmoid curve
  6. def prob_v_given_h(self, hidden, w, vb):
  7. return tf.nn.sigmoid(tf.matmul(hidden, tf.transpose(w)) + vb)

tf.matmul函数

  1. matmul(
  2. a,
  3. b,
  4. transpose_a=False,
  5. transpose_b=False,
  6. adjoint_a=False,
  7. adjoint_b=False,
  8. a_is_sparse=False,
  9. b_is_sparse=False,
  10. name=None
  11. )

将矩阵 a 乘以矩阵 b,生成a b
输入必须在任何转换之后是 rank> = 2 的张量,其中内部 2 维度指定有效的矩阵乘法参数,并且任何其他外部维度匹配.
两个矩阵必须是相同类型.支持的类型有:float16,float32,float64,int32,complex64,complex128.
通过将相应的标志之一设置为 True,矩阵可以被转置或 adjointed(共轭和转置).默认情况下,这些都是 False.
如果一个或两个矩阵包含很多的零,则可以通过将相应的 a_is_sparse 或 b_is_sparse 标志设置为 True 来使用更有效的乘法算法,默认为 false.这个优化仅适用于具有数据类型为bfloat16 或 float32 的纯矩阵(rank 为2的张量).
*参数:

  • a:类型为 float16,float32,float64,int32,complex64,complex128 和 rank > 1的张量.
  • b:与 a 具有相同类型和 rank.
  • transpose_a:如果 True,a 在乘法之前转置.
  • transpose_b:如果 True,b 在乘法之前转置.
  • adjoint_a:如果 True,a 在乘法之前共轭和转置.
  • adjoint_b:如果 True,b 在乘法之前共轭和转置.
  • a_is_sparse:如果 True,a 被视为稀疏矩阵.
  • b_is_sparse:如果 True,b 被视为稀疏矩阵.
  • name:操作名称(可选).

返回:
该函数返回与 a 和 b 具有相同类型的张量,其中每个最内矩阵是 a 和 b 中对应矩阵的乘积,例如,如果所有转置或伴随的属性为 False:
可能引发的异常:

  • ValueError:如果 transpose_a 和 adjoint_a,或者 transpose_b 和 adjoint_b 都设置为 True.

    tf.nn.sigmoid函数

    tf.nn.sigmoid函数具有以下所列的别名:

  • tf.nn.sigmoid

  • tf.sigmoid

    1. sigmoid(
    2. x,
    3. name=None
    4. )

    计算 x 元素的sigmoid.
    具体来说,就是:y = 1/(1 + exp (-x)).
    参数:

  • x:一个Tensor,具有以下的类型:float16、float32、float64、complex64或complex128.

  • name:操作的名称(可选).

返回:
与x具有相同的Tensor.

tf.transpose函数

  1. tf.transpose(
  2. a,
  3. perm=None,
  4. name='transpose',
  5. conjugate=False
  6. )

置换 a,根据 perm 重新排列尺寸.
返回的张量的维度 i 将对应于输入维度 perm[i].如果 perm 没有给出,它被设置为(n-1 … 0),其中 n 是输入张量的秩.因此,默认情况下,此操作在二维输入张量上执行常规矩阵转置.如果共轭为 True,并且 a.dtype 是 complex64 或 complex128,那么 a 的值是共轭转置和.
参数:

  • a:一个 Tensor.
  • perm:a 的维数的排列.
  • name:操作的名称(可选).
  • conjugate:可选 bool,将其设置为 True 在数学上等同于 tf.conj(tf.transpose(input)).

返回:
tf.transpose 函数返回一个转置 Tensor.