zoukankan      html  css  js  c++  java
  • Tensorflow从0到1(2)之基础知识

    张量

    张量是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 ……




  • 相关阅读:
    mongodb.conf配置文件
    mongodb创建普通角色和普通用户
    add unique index 注意事项
    error: src refspec master does not match any
    innodb_data_file_path配置变更引发mysql重启失败
    time_zone参数配置
    主键有无检测
    gdb在线修改mysql变量
    mybatis连接数据库
    mongo登录
  • 原文地址:https://www.cnblogs.com/huanghanyu/p/12923788.html
Copyright © 2011-2022 走看看