tensorflow入門應用方法(五)——Imagenet VGG-19網(wǎng)絡加載和特征可視化

前一篇文章tensorflow入門應用方法(四)——訓練模型的保存和讀取中提到保存訓練模型和讀取的方法林束。這篇文章主要闡述加載已經(jīng)訓練好的Imagenet VGG-19網(wǎng)絡對圖像貓進行識別刑巧,并且可視化VGG網(wǎng)絡卷積層的特征圖像。

下載Imagenet VGG-19

http://www.vlfeat.org/matconvnet/models/beta16/imagenet-vgg-verydeep-19.mat

加載Imagenet VGG-19

完整代碼如下:

import scipy.io
import numpy as np
import os
import scipy.misc
import matplotlib.pyplot as plt
import tensorflow as tf


def _conv_layer(input, weights, bias):
    conv = tf.nn.conv2d(input, tf.constant(weights), strides=(1,1,1,1), padding='SAME')
    return tf.nn.bias_add(conv, bias)


def _pool_layer(input):
    return tf.nn.max_pool(input, ksize=(1,2,2,1), strides=(1,2,2,1), padding='SAME')


def preprocess(image, mean_pixel):
    return image - mean_pixel


def unprocess(image, mean_piexl):
    return image + mean_piexl


def imread(path):
    return scipy.misc.imread(path).astype(np.float)


def imsave(path, img):
    img = np.clip(img, 0, 255).astype(np.int8)
    scipy.misc.imsave(path, img)

print('functions for vgg ready')


def net(data_path, input_image):
    layers = (
        'conv1_1', 'relu1_1', 'conv1_2', 'relu1_2', 'pool1',
        'conv2_1', 'relu2_1', 'conv2_2', 'relu2_2', 'pool2',
        'conv3_1', 'relu3_1', 'conv3_2', 'relu3_2',
        'conv3_3', 'relu3_3', 'conv3_4', 'relu3_4', 'pool3',
        'conv4_1', 'relu4_1', 'conv4_2', 'relu4_2',
        'conv4_3', 'relu4_3', 'conv4_4', 'relu4_4', 'pool4',
        'conv5_1', 'relu5_1', 'conv5_2', 'relu5_2',
        'conv5_3', 'relu5_3', 'conv5_4', 'relu5_4'
    )
    data = scipy.io.loadmat(data_path)
    mean = data['normalization'][0][0][0]
    mean_pixel = np.mean(mean, axis=(0,1))
    weights = data['layers'][0]
    net = {}
    current = input_image
    for i, name in enumerate(layers):
        kind = name[:4]
        if kind == 'conv':
            kernels, bias = weights[i][0][0][0][0]
            kernels = np.transpose(kernels, (1, 0, 2, 3))
            bias = bias.reshape(-1)
            current = _conv_layer(current, kernels, bias)
        elif kind == 'relu':
            current = tf.nn.relu(current)
        elif kind == 'pool':
            current = _pool_layer(current)
        net[name] = current
    assert len(net) == len(layers)
    return net, mean_pixel, layers

print('network for vgg ready')


cwd = os.getcwd()
vgg_path = cwd + '/data/imagenet-vgg-verydeep-19.mat'
img_path = cwd + '/data/cat.jpeg'
input_image = imread(img_path)
shape = (1, input_image.shape[0], input_image.shape[1], input_image.shape[2])

with tf.Session() as sess:
    image = tf.placeholder('float', shape=shape)
    nets, mean_pixel, all_layers = net(vgg_path, image)
    input_image_pre = np.array([preprocess(input_image, mean_pixel)])
    layers = all_layers

    for i, layer in enumerate(layers):
        print('[%d/%d] %s' % (i+1, len(layers), layer))
        features = nets[layer].eval(feed_dict={image: input_image_pre})

        print('Type of ‘features’ is ', type(features))
        print('Shape of ‘features’ is ', (features.shape,))

        if 1:
            plt.figure(i+1, figsize=(10, 5))
            plt.matshow(features[0, :, :, 0], cmap=plt.cm.gray, fignum=i+1)
            plt.title(''+layer)
            plt.colorbar()
            plt.show()

卷積層特征圖像顯示

vgg-19網(wǎng)絡的輸入圖片如下


埃及貓

各卷積層的特征圖像

conv1~2 conv3_1~3_4 conv4_1~4_4 conv5_1~5_4
conv1_1
conv3_1
conv4_1
conv5_1
conv1_2
conv3_2
conv4_2
conv5_2
conv2_1
conv3_3
conv4_3
conv5_3
conv2_2
conv3_4
conv4_4
conv5_4
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末通惫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子驱敲,更是在濱河造成了極大的恐慌,老刑警劉巖泵喘,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異般妙,居然都是意外死亡纪铺,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門碟渺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鲜锚,“玉大人,你說我怎么就攤上這事苫拍∥叻保” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵绒极,是天一觀的道長骏令。 經(jīng)常有香客問我,道長集峦,這世上最難降的妖魔是什么伏社? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮塔淤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘速妖。我一直安慰自己高蜂,他們只是感情好,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布罕容。 她就那樣靜靜地躺著备恤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锦秒。 梳的紋絲不亂的頭發(fā)上露泊,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音旅择,去河邊找鬼惭笑。 笑死,一個胖子當著我的面吹牛生真,可吹牛的內(nèi)容都是我干的沉噩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼柱蟀,長吁一口氣:“原來是場噩夢啊……” “哼川蒙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起长已,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤畜眨,失蹤者是張志新(化名)和其女友劉穎昼牛,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體康聂,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡贰健,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了早抠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霎烙。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蕊连,靈堂內(nèi)的尸體忽然破棺而出悬垃,到底是詐尸還是另有隱情,我是刑警寧澤甘苍,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布尝蠕,位于F島的核電站,受9級特大地震影響载庭,放射性物質(zhì)發(fā)生泄漏看彼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一囚聚、第九天 我趴在偏房一處隱蔽的房頂上張望靖榕。 院中可真熱鬧,春花似錦顽铸、人聲如沸茁计。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽星压。三九已至,卻和暖如春鬼譬,著一層夾襖步出監(jiān)牢的瞬間娜膘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工优质, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留竣贪,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓盆赤,卻偏偏與公主長得像贾富,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子牺六,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容