TensorFlow下的slim模块

1、slim.arg_scope:可以定义一些函数的默认参数值,在scope内,重复用到的函数可以不用吧所有参数都写一遍。

with slim.arg_scope([slim.conv2d, slim.fully_connected], 
                    trainable=True,
                    activation_fn=tf.nn.relu, 
                    weights_initializer=tf.truncated_normal_initializer(stddev=0.01), 
                    weights_regularizer=slim.l2_regularizer(0.0001)):
    with slim.arg_scope([slim.conv2d], 
                        kernel_size=[3, 3], 
                        padding='SAME',
                        normalizer_fn=slim.batch_norm):
        net = slim.conv2d(net, 64, scope='conv1'))
        net = slim.conv2d(net, 128, scope='conv2'))
        net = slim.conv2d(net, 256, [5, 5], scope='conv3'))

一个slim_scope内可以用list来勇士定义多个函数的默认参数,同时允许相互嵌套。在其中调用的函数中,可以不用重复写一些参数(倒数二三行不用重复写kernel_size=[3,3[),但也允许覆盖原来的参数(最后一行[5,5])
2、slim.conv2d:卷积层,一般调用方法:

net = slim.conv2d(inputs, 256, [3, 3], stride=1, scope='conv1_1')

前三个参数一次为网络的输入,输出的通道,卷积核大小,stride是卷积步长。除此之外,还有几个经常被用到的参数:

padding : 补零的方式,例如'SAME'
activation_fn : 激活函数,默认是nn.relu, VGG16中就用的是ReLU
normalizer_fn : 正则化函数,默认为None,这里可以设置为batch normalization,函数用slim.batch_norm
normalizer_params : slim.batch_norm中的参数,以字典形式表示
weights_initializer : 权重的初始化器,initializers.xavier_initializer()
weights_regularizer : 权重的正则化器,一般不怎么用到
biases_initializer : 如果之前有batch norm,那么这个及下面一个就不用管了
biases_regularizer : 
trainable : 参数是否可训练,默认为True

3、slim.max_pool2d:池化层:

net = slim.max_pool2d(net, [2, 2], scope='pool1')

4、slim.fully_connected:全连接层,前两个参数分别为网络输入、输出的神经元数量。

slim.fully_connected(x, 128, scope='fc1')

你可能感兴趣的:(TensorFlow学习)