美文网首页
TF-Slim模型创建和预训练模型

TF-Slim模型创建和预训练模型

作者: 卜是 | 来源:发表于2020-08-14 12:39 被阅读0次

TF-Slim提供简化的卷积神经网络定义的语法,使得构建复杂网络变得简单易行。同时,提供多种预训练模型的下载和使用:VGG、AlexNet、Inception等。

在一个抽象级别上定义一个层操作,在一个命令中包含卷积操作、权重初始化、正则化和激活函数等:

net = slim.conv2d(inputs, 64, [11, 11], 4, padding='SAME', weights_initializer=tf.truncated_normal_initializer(stddev=0.01), weights_regularizer=slim.l2_regularizer(0.0007), scope='conv1')

使用repeat可避免复制或粘贴相同的行,但只适用于图层大小相同的情况:

net = slim.repeat(net, 5, slim.conv2d, 128, [3, 3], scope='conv1')

当图层大小不一时,可使用stack命令,允许连接不同形状的图层:

net = slim.stack(net, slim.conv2d, [(64, [3, 3]), (64, [1, 1]), (128, [3, 3]), (128, [1, 1]), (256, [3, 3])], scop='conv'
)

使用arg_scope的作用域机制,可将一组共享参数传递给同一个作用域中定义的每个操作:

with slim.arg_scope([slim.conv2d], padding='VALID', activation_fn=tf.nn.relu,
                                  weights_initializer=tf.truncated_normal_initializer(stddev=0.02),
                                  weights_regularizer=slim.l2_regularizer(0.001)):
    net = slim.conv2d(inputs, 64, [3, 3], scope='conv1')
    net = slim.conv2d(inputs, 128, [5, 5], padding='SAME', scope='conv2')

下载并使用预训练VGG16模型

from tensorflow.contrib import slim
sys.path.append("/home/itay/git/models/slim")

import sys
from datasets import dataset_utils
import tensorflow as tf
import urllib2
from nets import vgg
from preprocessing import vgg_preprocessing
import os

target_dir = '/home/itay/git/checkpoints'

url = ("http://54.68.5.226/car.jpg")

im_as_string = urllib2.urlopen(url).read()  
im = tf.image.decode_jpeg(im_as_string, channels=3)

image_size = vgg.vgg_16.default_image_size

processed_im = vgg_preprocessing.preprocess_image(im,
                                                         image_size,
                                                         image_size,
                                                         is_training=False)

processed_images  = tf.expand_dims(processed_im, 0)

with slim.arg_scope(vgg.vgg_arg_scope()):
     logits, _ = vgg.vgg_16(processed_images,
                            num_classes=1000,
                             is_training=False)
probabilities = tf.nn.softmax(logits)

def vgg_arg_scope(weight_decay=0.0005):
    with slim.arg_scope([slim.conv2d, slim.fully_connected],
                     activation_fn=tf.nn.relu,
                     weights_regularizer=slim.l2_regularizer(weight_decay),
                     biases_initializer=tf.zeros_initializer):
    with slim.arg_scope([slim.conv2d], padding='SAME') as arg_sc:
        return arg_sc

load_vars = slim.assign_from_checkpoint_fn(
     os.path.join(target_dir, 'vgg_16.ckpt'),
     slim.get_model_variables('vgg_16'))

from datasets import imagenet
imagenet.create_readable_names_for_imagenet_labels()
names = []
with tf.Session() as sess:
    load_vars(sess)     
    network_input, probabilities = sess.run([processed_images,
                                             probabilities])
    probabilities = probabilities[0, 0:]
    names_ = imagenet.create_readable_names_for_imagenet_labels()
    idxs = np.argsort(-probabilities)[:5]
    probs = probabilities[idxs]
    classes = np.array(names_.values())[idxs+1]
    for c,p in zip(classes,probs):
        print('Class: '+ c + ' |Prob: ' + str(p))

相关文章

网友评论

      本文标题:TF-Slim模型创建和预训练模型

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