美文网首页
TF - 常用的模块

TF - 常用的模块

作者: 大地瓜_ | 来源:发表于2019-01-11 23:49 被阅读0次

    卷积神经网络设计主要是tensorflow网络层的定义和编写,本部分可能较多的涉及到相关函数的说明。

    • 卷积模块
    tf.nn.conv2d(x, w, strides=[1,1,1,1], padding='SAME')
    
     * x 对应一个batch_size的图像,[ batch_size, img_height, img_width, channel ]   (channel_last 模式)
     * w 对应卷积核,[kernel_height, kernel_width, input_channels, output_channels]
     * strides 对应步长,即卷积核每一步前进的长度,[1, stride_height, stride_width, 1]
     * padding 对应same和valid模式
    

    卷积封装模块

    def conv2d(x, W, bias):
        conv = tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding="SAME")
        return tf.nn.bias_add(conv, bias)
    
    • 池化模块
    tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')
    
     * ksize 池化核的大小
     * strides 池化核的步长
     * padding 周围是否补全  
    

    池化封装模块

    def max_pool(x):
        return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="SAME")
    
    • 激活层
    tf.nn.relu(x)
    
    • softmax层
    tf.nn.softmax(x, dim)
    
     * dim指定维度来进行softmax变换
     * default dim = -1 表示最后一个维度
    **************** 举例说明 ****************
    
    a = tf.ones([3,2], name="test", dtype=tf.float32)
    
    b = tf.nn.softmax(a, dim=0)
    # 第一个维度上的变换
    # b= [[0.33, 0.33][0.33 0.33][0.33 0.33]]
    
    b = tf.nn.softmax(a, dim=1)
    # 第二个维度上的变换
    # b =  [[ 0.5  0.5] [ 0.5  0.5] [0.5 0.5]]
    #b = tf.nn.softmax(a, dim=-1)
    

    常见函数的封装

    • tf.reduce_sum & tf.reduce_mean
    tf.reduce_sum(x, axis = 0)
    * 计算一个张量的各个维度上元素的总和
    
    **************** 举例说明 ****************
    
    x = tf.constant([[1, 1, 1], [1, 1, 1]])
    b = tf.reduce_sum(x)
    # 6
    # 如果axis没有条目,则缩小所有维度,并返回具有单个元素的张量
    
    b = tf.reduce_sum(x, axis = 0)
    # [2 , 2, 2]
    # shape [2,3] 把第一个维度衰减了 [1 3]
    
    • tf.argmax
    tf.argmax(input, axis=None, name=None, dimension=None)
    * 对矩阵按行或列计算最大值
    * 返回行或列的最大值下标向量
    
    **************** 举例说明 ****************
    
    a=tf.get_variable(name='a',
                      shape=[3,4],
                      dtype=tf.float32,
    initializer=tf.random_uniform_initializer(minval=-1,maxval=1))
    b=tf.argmax(input=a,axis=0)
    c=tf.argmax(input=a,dimension=1)  
    
    print(sess.run(a))
    #[[ 0.04261756 -0.34297419 -0.87816691 -0.15430689]
    # [ 0.18663144  0.86972666 -0.06103253  0.38307118]
    # [ 0.84588599 -0.45432305 -0.39736366  0.38526249]]
    print(sess.run(b))
    #[2 1 1 2]
    print(sess.run(c))
    #[0 1 0]
    
    • tf.cast
    tf.cast(x, dtype, name=None)
    * 类型转换函数
    * dtype:转换目标类型
    * name:名称
    
    **************** 举例说明 ****************
    # tensor `a` is [1.8, 2.2], dtype=tf.float
    tf.cast(a, tf.int32) ==> [1, 2]  # dtype=tf.int32
    
    • tf.equal
    A = [[1,3,4,5,6]]
    B = [[1,3,4,3,2]]
    print(sess.run(tf.equal(A, B)))
    # [[ True  True  True False False]]
    

    实际中的运用

    correct_prediction=tf.equal(tf.argmax(y_out,1),tf.argmax(y_,1))
    accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
    
    • tf.concat
    # reference : https://blog.csdn.net/loseinvain/article/details/79638183
    a = tf.constant([[1,2,3],[3,4,5]]) # shape (2,3)
    b = tf.constant([[7,8,9],[10,11,12]]) # shape (2,3)
    ab1 = tf.concat([a,b], axis=0) # shape(4,3)
    ab2 = tf.concat([a,b], axis=1) # shape(2,6)
    
    • tf.stack
    a = tf.constant([[1,2,3],[3,4,5]]) # shape (2,3)
    b = tf.constant([[7,8,9],[10,11,12]]) # shape (2,3)
    ab = tf.stack([a,b], axis=0) # shape (2,2,3)
    

    相关文章

      网友评论

          本文标题:TF - 常用的模块

          本文链接:https://www.haomeiwen.com/subject/nyyfdqtx.html