……

张量

张量是tensorflow中的基本数据结构

# 全零张量
zero_tsr = tf.zeros([row_dim, col_dim])
# 全1张量
ones_tsr = tf.ones([row_dim, col_dim])
# 填充张量
filled_tsr = tf.fill([row_dim, col_dim], 42)
# 常量
constant_tsr1 = tf.constant([1,2,3])
constant_tsr2 = tf.constant(42, [row_dim, col_dim])
# 形状相似的张量
zeros_similar = tf.zeros_like(constant_tsr)
ones_similar = tf.ones_like(constant_tsr)
# 序列张量
linear_tsr = tf.linspace(start=0., stop=1., num=3)
inter_seq_tsr = tf.range(start=6, limit=15, delta=3) # 不包括limit
# 随机张量
randunif_tsr = tf.random_uniform( # 均匀分布
                [row_dim, col_dim], # 维度
                minval=0, maxval=1) # 最大值(不包含),最小值
randnorm_tsr = tf.random_normal( # 正态分布
                [row_dim, col_dim], #维度
                mean = 0.0, # 均值
                stddev = 1.0) # 标准差
truncnorm_tsr = tf.truncated_normal( # 截断正态分布,只取两个标准差之间的数
                [row_dim, col_dim],
                mean = 0.0,
                stddec = 1.0)
## 张量随机洗牌,对每列
shuffled_output = tf.random_shuffle(input_tensor)
## 张量随机裁剪
cropped_output = tf.random_crop(input_tensor, crop_size) # 把张量随机裁剪成指定尺寸
cropped_image = tf.random_crop(my_image, [height/2, width/2, 3]) # 例如把图片长宽缩短一半

变量

tf.Variable()中传入一个张量就可以创建变量了

my_var = tf.Variable(tf.zeros([row_dim, col_dim]))

延伸学习

可以使用tf.convert_to_tensor()函数将任意numpy数组转换为张量,或者将常量转换为一个张量。

创建变量并初始化

my_var = tf.Variable(tf.zeros([2,3]))
sess = tf.Session()
initialize_op = tf.global_variable_initializer()
sess.run(initialize_op)

占位符

占位符仅仅声明数据位置,用于传入数据到计算图。占位符通过feed_dict参数获取数据。

sess = tf.Session()
x = tf.placeholder(shape=[2,2], dtype=tf.float32)
y = tf.identity(x) # return a tensor with the same shape and contents as input.
x_vals = np.random.rand(2,2)
sess.run(y, feed_dict={x:x_vals})

变量初始化延伸

tf.global_variables_initializer()函数会一次性初始化所创建的所有变量,使用方法如下:

initializer_op = tf.global_variables_initializer()

但是,如果是基于已经初始化的变量进行初始化,则必须按顺序初始化

sess = tf.Session()
first_var = tf.Variable(tf.zeros([2,3]))
sess.run(first_var.initializer)
second_var = tf.Variable(tf.zeros_like(first_var))
sess.run(second_var.initializer)

矩阵操作

import tensorflow as tf
sess = tf.Session()
identity_matrix = tf.diag([1., 1., 1.]) # 用tf.diag创建对角矩阵
A = tf.truncated_normal([2, 3])
B = tf.fill([2, 3], 5.0)
C = tf.random_uniform([3, 2])
D = tf.convert_to_tensor(np.array([[1., 2., 3.], 
                                   [-3., -7., -1.],
                                   [0., 5., -2.]]))
# 矩阵加法
print(sess.run(A+B))
print(sess.run(tf.add(A,B)))
# 矩阵减法
print(sess.run(A-B))
print(sess.run(tf.subtract(A,B))
# 矩阵乘法
print(sess.run(tf.matmul(B, identity_matrix)))
# 矩阵转置
print(sess.run(tf.transpose(C)))
# 矩阵行列式
print(sess.run(tf.matrix_determinant(D)))
# 矩阵的逆
print(sess.run(tf.matrix_inverse(D)))
# 矩阵Cholesky分解
print(sess.run(tf.cholesky(identity_matrix)))
# 矩阵特征值和特征向量
print(sess.run(tf.self_adjoint_eig(D)))

矩阵的其他操作

add()、subtract()、multiply()、div()加、减、乘、除法,都是逐元素操作(elememt-wise)

# 注意div()对整数操作会向下取整
print(sess.run(tf.div(3,4))) # 输出为零
# truediv()会先转换为浮点数再相除
print(sess.run(tf.truediv(3,4))) # 输出0.75
# 对浮点数进行整数除法,可以使用floordiv()函数
print(sess.run(tf.floordiv(3.0, 4.0))) # 输出 0.0

另一个重要的函数是取模运算mod()

print(sess.run(tf.mod(22.0, 5.0))) # 输出 2.0

cross()函数计算两个张量间的点积。 (这个不是很懂?~?!)

print(sess.run(tf.cross([1., 0., 0.], [0., 1., 0.])))

常用数学函数列表

函数功能
abs() 返回输入参数张量的绝对值
ceil() 返回输入参数张量的向上取整结果
cos() 返回输入参数张量的余弦值
exp() 返回输入参数张量的自然常数e的指数
floor() 返回输入参数张量的向下取整结果
inv() 返回输入参数张量的倒数
log() 返回输入参数张量的自然对数
maximum() 返回两个输入参数张量中的最大值
minimum() 返回两个输入参数张量中的最小值
neg() 返回输入参数张量的负值
pow() 返回输入参数第一个张量的第二个张量次幂
round() 返回输入参数张量的四舍五入结果
rsqrt() 返回输入参数张量的平方根的倒数
sign() 根据输入参数张量的符号,返回-1, 0 或1
sin() 返回输入参数张量的正弦值
square() 返回输入参数张量的平方

特殊数学函数列表
注:这里的函数不是很懂,日后用到了再深究

函数功能
digamma() \Psi函数, lgamma()函数导数
erf() 返回张量的高斯误差函数
erfc() 返回张量的互补误差函数
igamma() 返回下不完全\Gamma函数
igammac() 返回上不完全全\Gamma函数
lbeta() 返回贝塔函数绝地值得自然对数
lgamma() 返回\Gamma函数绝对值的自然对数
squared_difference() 返回两个张量间差值的平方

实现激励函数

激励函数主要是为计算图归一化返回结果而引进的非线性部分。激励函数位于tensorflow的nn库(neural network, nn)。

激励函数定义备注
tf.nn.relu() max(0, x) 大于零取原值,小于零取零
tf.nn.relu6() min(6, max(0, x)) 大于六取六,其他与relu一样
tf.nn.sigmoid() 1/(1+e^{-x}) 0到1之间平滑的s曲线
tf.nn.tanh() (e^x-e^{-x})/(e^x + e^{-x}) -1到1之间平滑的s型曲线
softsign() x/(1+ abs(x) ) 符号函数的连续估计
softplus() \log(1+e^x) ReLU函数的平滑版
tf.nn.elu() (e^x-1) \quad if \quad x<0 \quad else \quad x ……




 posted on 2020-05-20 15:22  大码王  阅读(460)  评论(0编辑  收藏  举报
复制代码