1 Star 0 Fork 38

惑之与/w8_lichonggui_861722741_1

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
densenet.py 4.99 KB
一键复制 编辑 原始数据 按行查看 历史
惑之与 提交于 2018-05-01 17:57 . 更新 densenet.py
"""Contains a variant of the densenet model definition."""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import tensorflow as tf
slim = tf.contrib.slim
def trunc_normal(stddev): return tf.truncated_normal_initializer(stddev=stddev)
def bn_act_conv_drp(current, num_outputs, kernel_size, scope='block'):
current = slim.batch_norm(current, scope=scope + '_bn')
current = tf.nn.relu(current)
current = slim.conv2d(current, num_outputs, kernel_size, scope=scope + '_conv')
current = slim.dropout(current, scope=scope + '_dropout')
return current
def block(net, layers, growth, scope='block'):
for idx in range(layers):
bottleneck = bn_act_conv_drp(net, 4 * growth, [1, 1],
scope=scope + '_conv1x1' + str(idx))
tmp = bn_act_conv_drp(bottleneck, growth, [3, 3],
scope=scope + '_conv3x3' + str(idx))
net = tf.concat(axis=3, values=[net, tmp])
return net
def densenet(images, num_classes=1001, is_training=False,
dropout_keep_prob=0.8,
scope='densenet'):
"""Creates a variant of the densenet model.
images: A batch of `Tensors` of size [batch_size, height, width, channels].
num_classes: the number of classes in the dataset.
is_training: specifies whether or not we're currently training the model.
This variable will determine the behaviour of the dropout layer.
dropout_keep_prob: the percentage of activation values that are retained.
prediction_fn: a function to get predictions out of logits.
scope: Optional variable_scope.
Returns:
logits: the pre-softmax activations, a tensor of size
[batch_size, `num_classes`]
end_points: a dictionary from components of the network to the corresponding
activation.
"""
growth = 24
compression_rate = 0.5
def reduce_dim(input_feature):
return int(int(input_feature.shape[-1]) * compression_rate)
end_points = {}
with tf.variable_scope(scope, 'DenseNet', [images, num_classes]):
with slim.arg_scope(bn_drp_scope(is_training=is_training,
keep_prob=dropout_keep_prob)) as ssc:
##########################
# Put your code here.
##########################
net = slim.conv2d(images,growth,[7,7],stride=2,scope='conv')
end_points['conv']=net
net=slim.max_pool2d(net,[3,3],padding='same',stride=2,scope='pooling')
end_points['pooling']=net
net=block(net,6,growth,scope='dense_block1')
end_points['dense_block1']=net
net = bn_act_conv_drp(net, reduce_dim(net), [1, 1], scope='transision_layer1')
net=slim.avg_pool2d(net,[2,2],stride=2)
end_points['transision_layer1']=net
net=block(net,12,growth,scope='dense_block2')
end_points['dense_block2']=net
net = bn_act_conv_drp(net, reduce_dim(net), [1, 1], scope='transision_layer2')
net=slim.avg_pool2d(net,[2,2],stride=2)
end_points['transision_layer2']=net
net=block(net,48,growth,scope='dense_block3')
end_points['dense_block3']=net
net = bn_act_conv_drp(net, reduce_dim(net), [1, 1], scope='transision_layer3')
net=slim.avg_pool2d(net,[2,2],stride=2)
end_points['transision_layer3']=net
net=block(net,32,growth,scope='dense_block4')
end_points['dense_block4']=net
net=slim.batch_norm(net,scope='Classification_Layer' )
net=slim.nn.relu(net)
net=slim.avg_pool2d(net,net.shape[1:3],padding='Same')
logits=slim.conv2d(net,num_classes,[1,1],biases_initializer=tf.zeros_initializer())
end_points['Classification_Layer']=logits
return logits, end_points
def bn_drp_scope(is_training=True, keep_prob=0.8):
keep_prob = keep_prob if is_training else 1
with slim.arg_scope(
[slim.batch_norm],
scale=True, is_training=is_training, updates_collections=None):
with slim.arg_scope(
[slim.dropout],
is_training=is_training, keep_prob=keep_prob) as bsc:
return bsc
def densenet_arg_scope(weight_decay=0.004):
"""Defines the default densenet argument scope.
Args:
weight_decay: The weight decay to use for regularizing the model.
Returns:
An `arg_scope` to use for the inception v3 model.
"""
with slim.arg_scope(
[slim.conv2d],
weights_initializer=tf.contrib.layers.variance_scaling_initializer(
factor=2.0, mode='FAN_IN', uniform=False),
activation_fn=None, biases_initializer=None, padding='same',
stride=1) as sc:
return sc
densenet.default_image_size = 224
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/HuoZhiYu/quiz-w7-2-densenet.git
git@gitee.com:HuoZhiYu/quiz-w7-2-densenet.git
HuoZhiYu
quiz-w7-2-densenet
w8_lichonggui_861722741_1
master

搜索帮助