zoukankan      html  css  js  c++  java
  • TensorFlow——tf.contrib.layers库中的相关API

    在TensorFlow中封装好了一个高级库,tf.contrib.layers库封装了很多的函数,使用这个高级库来开发将会提高效率,卷积函数使用tf.contrib.layers.conv2d,池化函数使用tf.contrib.layers.max_pool2d和tf.contrib.layers.avg_pool2d,全连接函数使用 tf.contrib.layers.fully_connected,下面来看里面封装好的函数接口:

    以最复杂的卷积为例,其他的几个函数与之类似:

    layers.conv2d(inputs,
                  num_outputs,
                  kernel_size,
                  stride,
                  padding='SAME',
                  data_format=None,
                  rate=1,
                  activation_fn=tf.nn.relu,
                  normalizer_fn=None,
                  normalizer_params=None,
                  weights_initializer=initializers.xavier_initializers(),
                  weights_regularizer=None,
                  reuse=None,
                  variables_collections=None,
                  outputs_collections=None,
                  trainable=True,
                  scope=None)

    常用的参数说明:

    inputs:输入的数据

    num_outputs:设置输出的channel数量。这里不用在设置输入的channel的数量了,该函数会自动根据shape来判断。

    kernel_size:卷积核大小,不需要带上batch和channel,只需要输入尺寸即可,[ 5, 5 ]就代表5x5大小的卷积核,如果长宽都一样,可以直接写一个5就行了。

    stride:步长,默认的长宽都是相等的步长,卷积时一般都用1,默认的值也是1,如果长宽都不同,也可以用一个数组[ 1,2 ]来表示。

    padding:设置填充的规则。

    activation_fn:输出后的激活函数。

    weights_initializer:权重的初始化方式,默认使用的是 initializers.xavier_initializers(),能够使得所有层的梯度保持大体相同,biases_initializer同理。

    weights_regularizer:正则化项,可以加入正则函数。

    trainable:是否可训练,如作为训练节点,必须设置为True。

    下面我们使用layers构建一个网络模型:

    import tensorflow.contrib.layers as layers
    
    x = tf.placeholder(dtype=tf.float32, shape=[None, 32, 32, 3])
    y = tf.placeholder(dtype=tf.float32, shape=[None, 10])
    
    x_images = tf.reshape(x, [-1, 32, 32, 3])
    
    h_conv1 = layers.conv2d(x_images, 64, 3, 1, activation_fn=tf.nn.relu)
    h_pool1 = layers.max_pool2d(h_conv1, [2, 2], stride=2, padding='SAME')
    
    h_conv2 = layers.conv2d(h_pool1, 64, 3, 1, activation_fn=tf.nn.relu)
    h_pool2 = layers.max_pool2d(h_conv2, [2, 2], stride=2, padding='SAME')
    
    h_conv3 = layers.conv2d(h_pool2, 32, 3, 1, activation_fn=tf.nn.relu)
    h_pool3 = layers.max_pool2d(h_conv3, [2, 2], stride=2, padding='SAME')
    
    h_conv4 = layers.conv2d(h_pool3, 16, 3, 1, activation_fn=tf.nn.relu)
    h_pool4 = layers.max_pool2d(h_conv4, [2, 2], stride=2, padding='SAME')
    
    h_conv5 = layers.conv2d(h_pool4, 10, 3, 1, activation_fn=tf.nn.relu)
    y_pool = tf.reshape(h_conv5, shape=[-1, 40])
    
    y_pool = layers.fully_connected(y_pool, 10, activation_fn=None)
    
    cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=y_pool))
    
    optimizer = tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy)

    使用layers是不是极大的简化了网络默写的代码,提升了我们的代码效率。

  • 相关阅读:
    MongoDB ObjectId
    MongoDB固定集合
    MongoDB 正则表达式
    MongoDB Map Reduce
    MongoDB操作
    VIM跳到指定行
    linux之echo命令
    rpm and yum commands
    CentOS 7 下的软件安装建议
    apt系统中sources.list文件的解析
  • 原文地址:https://www.cnblogs.com/baby-lily/p/10993249.html
Copyright © 2011-2022 走看看