最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python神經(jīng)網(wǎng)絡(luò)VGG16模型復現(xiàn)及其如何預測詳解

 更新時間:2022年05月06日 09:06:42   作者:Bubbliiiing  
這篇文章主要為大家介紹了VGG16模型的復現(xiàn)及其詳解(包含如何預測),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

學一些比較知名的模型對身體有好處噢!

什么是VGG16模型

VGG是由Simonyan 和Zisserman在文獻《Very Deep Convolutional Networks for Large Scale Image Recognition》中提出卷積神經(jīng)網(wǎng)絡(luò)模型,其名稱來源于作者所在的牛津大學視覺幾何組(Visual Geometry Group)的縮寫。

該模型參加2014年的 ImageNet圖像分類與定位挑戰(zhàn)賽,取得了優(yōu)異成績:在分類任務(wù)上排名第二,在定位任務(wù)上排名第一。

可能大家會想,這樣一個這么強的模型肯定很復雜吧?

其實一點也不復雜,它的結(jié)構(gòu)如下圖所示:

這是一個VGG被用到爛的圖,但確實很好的反應(yīng)了VGG的結(jié)構(gòu):

1、一張原始圖片被resize到(224,224,3)。

2、conv1兩次[3,3]卷積網(wǎng)絡(luò),輸出的特征層為64,輸出為(224,224,64),再2X2最大池化,輸出net為(112,112,64)。

3、conv2兩次[3,3]卷積網(wǎng)絡(luò),輸出的特征層為128,輸出net為(112,112,128),再2X2最大池化,輸出net為(56,56,128)。

4、conv3三次[3,3]卷積網(wǎng)絡(luò),輸出的特征層為256,輸出net為(56,56,256),再2X2最大池化,輸出net為(28,28,256)。

5、conv3三次[3,3]卷積網(wǎng)絡(luò),輸出的特征層為256,輸出net為(28,28,512),再2X2最大池化,輸出net為(14,14,512)。

6、conv3三次[3,3]卷積網(wǎng)絡(luò),輸出的特征層為256,輸出net為(14,14,512),再2X2最大池化,輸出net為(7,7,512)。

7、利用卷積的方式模擬全連接層,效果等同,輸出net為(1,1,4096)。共進行兩次。

8、利用卷積的方式模擬全連接層,效果等同,輸出net為(1,1,1000)。

最后輸出的就是每個類的預測。

VGG網(wǎng)絡(luò)部分實現(xiàn)代碼

#-------------------------------------------------------------#
#   vgg16的網(wǎng)絡(luò)部分
#-------------------------------------------------------------#
import tensorflow as tf
# 創(chuàng)建slim對象
slim = tf.contrib.slim
def vgg_16(inputs,
           num_classes=1000,
           is_training=True,
           dropout_keep_prob=0.5,
           spatial_squeeze=True,
           scope='vgg_16'):
    with tf.variable_scope(scope, 'vgg_16', [inputs]):
        # 建立vgg_16的網(wǎng)絡(luò)
        # conv1兩次[3,3]卷積網(wǎng)絡(luò),輸出的特征層為64,輸出為(224,224,64)
        net = slim.repeat(inputs, 2, slim.conv2d, 64, [3, 3], scope='conv1')
        # 2X2最大池化,輸出net為(112,112,64)
        net = slim.max_pool2d(net, [2, 2], scope='pool1')
        # conv2兩次[3,3]卷積網(wǎng)絡(luò),輸出的特征層為128,輸出net為(112,112,128)
        net = slim.repeat(net, 2, slim.conv2d, 128, [3, 3], scope='conv2')
        # 2X2最大池化,輸出net為(56,56,128)
        net = slim.max_pool2d(net, [2, 2], scope='pool2')
        # conv3三次[3,3]卷積網(wǎng)絡(luò),輸出的特征層為256,輸出net為(56,56,256)
        net = slim.repeat(net, 3, slim.conv2d, 256, [3, 3], scope='conv3')
        # 2X2最大池化,輸出net為(28,28,256)
        net = slim.max_pool2d(net, [2, 2], scope='pool3')
        # conv3三次[3,3]卷積網(wǎng)絡(luò),輸出的特征層為256,輸出net為(28,28,512)
        net = slim.repeat(net, 3, slim.conv2d, 512, [3, 3], scope='conv4')
        # 2X2最大池化,輸出net為(14,14,512)
        net = slim.max_pool2d(net, [2, 2], scope='pool4')
        # conv3三次[3,3]卷積網(wǎng)絡(luò),輸出的特征層為256,輸出net為(14,14,512)
        net = slim.repeat(net, 3, slim.conv2d, 512, [3, 3], scope='conv5')
        # 2X2最大池化,輸出net為(7,7,512)
        net = slim.max_pool2d(net, [2, 2], scope='pool5')
        # 利用卷積的方式模擬全連接層,效果等同,輸出net為(1,1,4096)
        net = slim.conv2d(net, 4096, [7, 7], padding='VALID', scope='fc6')
        net = slim.dropout(net, dropout_keep_prob, is_training=is_training,
                            scope='dropout6')
        # 利用卷積的方式模擬全連接層,效果等同,輸出net為(1,1,4096)
        net = slim.conv2d(net, 4096, [1, 1], scope='fc7')
        net = slim.dropout(net, dropout_keep_prob, is_training=is_training,
                            scope='dropout7')
        # 利用卷積的方式模擬全連接層,效果等同,輸出net為(1,1,1000)
        net = slim.conv2d(net, num_classes, [1, 1],
                        activation_fn=None,
                        normalizer_fn=None,
                        scope='fc8')
        # 由于用卷積的方式模擬全連接層,所以輸出需要平鋪
        if spatial_squeeze:
            net = tf.squeeze(net, [1, 2], name='fc8/squeezed')
        return net

圖片預測

在圖片預測之前首先看看整個文檔的結(jié)構(gòu)。需要完整代碼可以直接下載

VGG16的模型下載可以用

鏈接: https://pan.baidu.com/s/18IT3ILvnD0uUJDx9-ums2A

提取碼: jr6u 完成

model用于存儲模型,nets用于存儲網(wǎng)絡(luò)結(jié)構(gòu),test_data用于存放圖片,demo就是之后要執(zhí)行的測試程序。

圖片預測的步驟其實就是利用訓練好的模型進行預測。

1、載入圖片

2、建立會話Session;

3、將img_input的placeholder傳入網(wǎng)絡(luò),建立網(wǎng)絡(luò)結(jié)構(gòu);

4、初始化所有變量;

5、利用saver對象restore載入所有參數(shù)。

6、讀取預測結(jié)果

demo.py的代碼如下:

from nets import vgg16
import tensorflow as tf
import numpy as np
import utils
# 讀取圖片
img1 = utils.load_image("./test_data/dog.jpg")
# 對輸入的圖片進行resize,使其shape滿足(-1,224,224,3)
inputs = tf.placeholder(tf.float32,[None,None,3])
resized_img = utils.resize_image(inputs, (224, 224))
# 建立網(wǎng)絡(luò)結(jié)構(gòu)
prediction = vgg16.vgg_16(resized_img)
# 載入模型
sess = tf.Session()
ckpt_filename = './model/vgg_16.ckpt'
sess.run(tf.global_variables_initializer())
saver = tf.train.Saver()
saver.restore(sess, ckpt_filename)
# 最后結(jié)果進行softmax預測
pro = tf.nn.softmax(prediction)
pre = sess.run(pro,feed_dict={inputs:img1})
# 打印預測結(jié)果
utils.print_prob(pre[0], './synset.txt')

utils里是一些工具代碼(工具人),包括載入圖片、圖片大小更改、打印預測結(jié)果等:

import matplotlib.image as mpimg
import numpy as np
import tensorflow as tf
from tensorflow.python.ops import array_ops
def load_image(path):
    # 讀取圖片,rgb
    img = mpimg.imread(path)
    # 將圖片修剪成中心的正方形
    short_edge = min(img.shape[:2])
    yy = int((img.shape[0] - short_edge) / 2)
    xx = int((img.shape[1] - short_edge) / 2)
    crop_img = img[yy: yy + short_edge, xx: xx + short_edge]
    return crop_img
def resize_image(image, size,
                 method=tf.image.ResizeMethod.BILINEAR,
                 align_corners=False):
    with tf.name_scope('resize_image'):
        image = tf.expand_dims(image, 0)
        image = tf.image.resize_images(image, size,
                                       method, align_corners)
        image = tf.reshape(image, tf.stack([-1,size[0], size[1], 3]))
        return image
def print_prob(prob, file_path):
    synset = [l.strip() for l in open(file_path).readlines()]
    # 將概率從大到小排列的結(jié)果的序號存入pred
    pred = np.argsort(prob)[::-1]
    # 取最大的1個、5個。
    top1 = synset[pred[0]]
    print(("Top1: ", top1, prob[pred[0]]))
    top5 = [(synset[pred[i]], prob[pred[i]]) for i in range(5)]
    print(("Top5: ", top5))
    return top1

該圖的預測結(jié)果為:

('Top1: ', 'n02099601 golden retriever', 0.98766345)
('Top5: ', [('n02099601 golden retriever', 0.98766345), ('n02099712 Labrador retriever', 0.0108569125), ('n02101556 clumber, clumber spaniel', 0.00039345716), ('n02102480 Sussex spaniel', 0.0002893341), ('n02102318 cocker spaniel, English cocker spaniel, cocker', 0.00018955152)])  

以上就是VGG16模型的復現(xiàn)及其詳解(包含如何預測)的詳細內(nèi)容,更多關(guān)于VGG16模型復現(xiàn)預測的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python 硬幣兌換問題

    Python 硬幣兌換問題

    這篇文章主要介紹了Python 硬幣兌換問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Flask框架踩坑之a(chǎn)jax跨域請求實現(xiàn)

    Flask框架踩坑之a(chǎn)jax跨域請求實現(xiàn)

    這篇文章主要介紹了Flask框架踩坑之a(chǎn)jax跨域請求實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • Python3.8安裝tensorflow的簡單方法步驟

    Python3.8安裝tensorflow的簡單方法步驟

    最近想要研究一下深度學習的應(yīng)用,于是翻了翻了社區(qū)的tensorflow安裝教程,所以下面這篇文章主要給大家介紹了關(guān)于Python3.8安裝tensorflow的簡單方法步驟,需要的朋友可以參考下
    2022-06-06
  • Python中Playwright的常用操作方法分享

    Python中Playwright的常用操作方法分享

    本文詳細介紹了Playwright的常用操作方法,包括獲取頁面元素、點擊按鈕和鏈接等。這些方法可以幫助開發(fā)者更加高效地進行自動化測試和爬蟲開發(fā),需要的可以參考一下
    2023-05-05
  • 使用C語言擴展Python程序的簡單入門指引

    使用C語言擴展Python程序的簡單入門指引

    這篇文章主要介紹了使用C語言擴展Python程序的簡單入門指引,來自于IBM官網(wǎng)網(wǎng)站技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • 這可能是最好玩的python GUI入門實例(推薦)

    這可能是最好玩的python GUI入門實例(推薦)

    這篇文章主要介紹了這可能是最好玩的python GUI入門實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Python學習筆記之json模塊和pickle模塊

    Python學習筆記之json模塊和pickle模塊

    json和pickle模塊是將數(shù)據(jù)進行序列化處理,并進行網(wǎng)絡(luò)傳輸或存入硬盤,下面這篇文章主要給大家介紹了關(guān)于Python學習筆記之json模塊和pickle模塊的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • Python操作Word批量生成合同的實現(xiàn)示例

    Python操作Word批量生成合同的實現(xiàn)示例

    這篇文章主要介紹了Python操作Word批量生成合同的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • 使用Termux在手機上運行Python的詳細過程

    使用Termux在手機上運行Python的詳細過程

    這篇文章主要介紹了使用Termux在手機上運行Python的詳細過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • 學習win32com操作word之Range精講

    學習win32com操作word之Range精講

    這篇文章主要為大家介紹了win32com操作word之Range精講學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01

最新評論

安阳县| 临颍县| 麟游县| 安义县| 吉木乃县| 瑞昌市| 申扎县| 凌海市| 永川市| 观塘区| 清徐县| 汨罗市| 女性| 德阳市| 通海县| 安溪县| 邵东县| 商城县| 文昌市| 陇南市| 曲周县| 惠东县| 沂南县| 育儿| 延津县| 炎陵县| 唐河县| 达州市| 靖西县| 白银市| 台南市| 凭祥市| 乡宁县| 元谋县| 永川市| 将乐县| 土默特右旗| 酉阳| 汝城县| 上栗县| 香港 |