1.conv
1.1 tf.nn.conv2d ----------- kernel,stride [ksize,ksize,input,output] [1,stride,stride,1]
with tf.name_scope('conv1') as scope:
kernel = tf.Variable(tf.truncated_normal([11, 11, 3, 64], dtype=tf.float32,
stddev=1e-1), name='weights')
conv = tf.nn.conv2d(images, kernel, [1, 4, 4, 1], padding='SAME')
biases = tf.Variable(tf.constant(0.0, shape=[64], dtype=tf.float32),
trainable=True, name='biases')
bias = tf.nn.bias_add(conv, biases)
1.2 slim.conv2d --------outputsize,ksize ,stride=default=1
net=slim.conv2d(images, 64, 11, stride=4,padding='SAME',scope='conv1') or
net=slim.conv2d(images, 64, [11,11], stride=4,padding='SAME',scope='conv1')
2.pool
2.1 tf. nn.max_pool
pool1 = tf.nn.max_pool(lrn1,
ksize=[1, 3, 3, 1],
strides=[1, 2, 2, 1],
padding='VALID',
name='pool1')
2.2 slim.max_pool2d
pool2 = slim.max_pool2d(lrn2, 3, 2, padding='VALID', scope='pool2')
3 fully_connect
3.1 tf.nn.xw_plus_b
in_shape = pool5.get_shape()[1]*pool5.get_shape()[2]*pool5.get_shape()[3]
flattened = tf.reshape(pool5, [-1, in_shape])
with tf.variable_scope('fc6') as scope:
weights = tf.get_variable('weights',shape=[in_shape,4096],trainable=True)
biases = tf.get_variable('biases',shape=[4096],trainable=True)
parameters += [weights, biases]
act = tf.nn.xw_plus_b(flattened,weights,biases)
relu = tf.nn.relu(act)
3.2 fully_connected
net = slim.fully_connected(net, 4096, activation_fn=None,
scope='Bottleneck', reuse=False)
4 relu
4.1 tf.nn.relu
relu = tf.nn.relu(net)
4.2
def _relu(x, leakiness=0.0):
"""Relu, with optional leaky support."""
return tf.where(tf.less(x, 0.0), leakiness * x, x, name='leaky_relu')
5. tf.concat
def block35(net, scale=1.0, activation_fn=tf.nn.relu, scope=None, reuse=None):
"""Builds the 35x35 resnet block."""
with tf.variable_scope(scope, 'Block35', [net], reuse=reuse):
with tf.variable_scope('Branch_0'):
tower_conv = slim.conv2d(net, 32, 1, scope='Conv2d_1x1')
with tf.variable_scope('Branch_1'):
tower_conv1_0 = slim.conv2d(net, 32, 1, scope='Conv2d_0a_1x1')
tower_conv1_1 = slim.conv2d(tower_conv1_0, 32, 3, scope='Conv2d_0b_3x3')
with tf.variable_scope('Branch_2'):
tower_conv2_0 = slim.conv2d(net, 32, 1, scope='Conv2d_0a_1x1')
tower_conv2_1 = slim.conv2d(tower_conv2_0, 32, 3, scope='Conv2d_0b_3x3')
tower_conv2_2 = slim.conv2d(tower_conv2_1, 32, 3, scope='Conv2d_0c_3x3')
mixed = tf.concat([tower_conv, tower_conv1_1, tower_conv2_2], 3)
up = slim.conv2d(mixed, net.get_shape()[3], 1, normalizer_fn=None,
activation_fn=None, scope='Conv2d_1x1')
net += scale * up
if activation_fn:
net = activation_fn(net)
return net
6. init
6.1 tf.truncated_normal的输出如字面意思是截断的,而截断的标准是2倍的stddev。
kernel = tf.Variable(tf.truncated_normal([11, 11, 3, 64], dtype=tf.float32,
stddev=1e-1), name='weights')
6.2.1 random_normal_initializer
with tf.variable_scope(name):
n = filter_size * filter_size * out_filters
kernel = tf.get_variable(
'DW', [filter_size, filter_size, in_filters, out_filters],
tf.float32, initializer=tf.random_normal_initializer(
stddev=np.sqrt(2.0 / n)))
6.2.2
images = tf.Variable(tf.random_normal([50,
image_size,
image_size, 3],
dtype=tf.float32,
stddev=1e-1), name='input')
6.3.1
with slim.arg_scope([slim.conv2d, slim.fully_connected],
weights_initializer=slim.initializers.xavier_initializer(),
weights_regularizer=slim.l2_regularizer(weight_decay),
normalizer_fn=slim.batch_norm,
normalizer_params=batch_norm_params):
6.3.2
6.4 .1
b = tf.get_variable('biases', [out_dim],
initializer=tf.constant_initializer())
6.4.2
biases = tf.Variable(tf.constant(0.0, shape=[64], dtype=tf.float32),
trainable=True, name='biases')
scope tf.name_scope has no influence on tf.Variable
3
1万+

被折叠的 条评论
为什么被折叠?



