keras中VGG19預訓練模型的使用
keras提供了VGG19在ImageNet上的預訓練權重模型檔案,其他可用的模型還有VGG16、Xception、ResNet50、InceptionV3 4個。
VGG19在keras中的定義:
def VGG19(include_top=True, weights='imagenet',
input_tensor=None, input_shape=None,
pooling=None,
classes=1000)
-
include_top: 是否包含最後的3個全連線層
-
weights: 定義為‘imagenet’,表示載入在imagenet資料庫上訓練的預訓練權重,定義為None則不載入權重,引數隨機初始化
包含最後3個全連線層的VGG19模型下載地址: https://github.com/fchollet/deep-learning-models/releases/download/v0.1/vgg19_weights_tf_dim_ordering_tf_kernels.h5
不包含最後3個全連線層的VGG19模型下載地址: https://github.com/fchollet/deep-learning-models/releases/download/v0.1/vgg19_weights_tf_dim_ordering_tf_kernels_notop.h5
不包含全連線層的VGG19模型檔名稱是" vgg19_weights_tf_dim_ordering_tf_kernels_notop.h5 " ,檔案大小約80MB;
包含全連線層的VGG19模型檔名稱是 " vgg19_weights_tf_dim_ordering_tf_kernels.h5 " ,檔案大小約575MB
ubuntu中,下載的VGG19模型檔案的本地路徑是 ~/.keras/models/ , .keras是一個隱藏資料夾。可以預先下載模型檔案放到對應目錄下,程式執行時檢測到存在模型檔案就不會再下載了。
使用VGG19預訓練模型分類圖片的例子
# coding: utf-8
from keras.applications.vgg19 import VGG19
from keras.preprocessing import image
from keras.applications.vgg19 import preprocess_input
from keras.models import Model
import numpy as np
base_model = VGG19(weights='imagenet', include_top=True)
img_path = 'cat.jpg'
img = image.load_img(img_path, target_size=(224, 224)) # 載入影象,歸一化大小
x = image.img_to_array(img) # 序列化
x = np.expand_dims(x, axis=0) # 展開
x = preprocess_input(x) # 預處理到0~1
out = base_model.predict(x) # 預測結果,1000維的向量
print(out.shape) # (1,1000)
程式首先載入帶3個全連線層的VGG19模型,然後讀入圖片並做格式轉換和歸一化等處理後執行VGG模型預測,預測結果out是一個1000維的向量,代表了預測結果分別屬於10000個分類的概率,形狀是(1,1000),out內容如下:
使用VGG19預訓練模型提取VGG19網路中任意層的輸出特徵的例子
上個例子可以看到keras對VGG網路的封裝異常好,簡單幾行程式碼就可以分類圖片。keras中VGG預訓練引數模型另一個更常用的應用是可以提取VGG網路中任意一層的特徵。
以下例子提取的是VGG19網路中第5個卷積層的輸出特徵(也是第1個全連線層的輸入特徵)
# coding: utf-8
from keras.applications.vgg19 import VGG19
from keras.preprocessing import image
from keras.applications.vgg19 import preprocess_input
from keras.models import Model
import numpy as np
base_model = VGG19(weights='imagenet', include_top=False)
model = Model(inputs=base_model.input, outputs=base_model.get_layer('block5_pool').output)
img_path = 'cat.jpg'
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
block5_pool_features = model.predict(x)
print(block5_pool_features.shape) #(1, 7, 7, 512)
base_model.get_layer('block5_pool')中的block5_pool引數定義了獲取的是第5個卷積層的輸出。第5層的輸出是一個 1×7×7×512的向量,如下:
也可以設定為載入最後3個全連線層的VGG19網路,就可以獲取最後3個全連線層的輸出了:
# coding: utf-8
from keras.applications.vgg19 import VGG19
from keras.preprocessing import image
from keras.applications.vgg19 import preprocess_input
from keras.models import Model
import numpy as np
base_model = VGG19(weights='imagenet', include_top=True)
model = Model(inputs=base_model.input, outputs=base_model.get_layer('fc2').output)
img_path = 'cat.jpg'
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
fc2 = model.predict(x)
print(fc2.shape) #(1, 4096)
加了全連線層,所以base_model.get_layer('fc2') 裡引數也可以是 flatten、fc1、fc2和predictions 。
VGG19各個模組在keras中定義的名稱如下,可以根據名稱輕鬆獲取該層特徵:
相關文章
- 【tf.keras】tf.keras載入AlexNet預訓練模型Keras模型
- TensorFlow2.0教程-使用keras訓練模型Keras模型
- 實驗12-使用keras預訓練模型完成貓狗識別Keras模型
- 【預訓練語言模型】 使用Transformers庫進行BERT預訓練模型ORM
- 運用預訓練 Keras 模型來處理影像分類請求,學習如何使用從 Keras 建立 SavedModelKeras模型
- 如何將keras訓練的模型轉換成tensorflow lite模型Keras模型
- 瀏覽器中的機器學習:使用預訓練模型瀏覽器機器學習模型
- 【預訓練語言模型】使用Transformers庫進行GPT2預訓練模型ORMGPT
- 對比復現34個預訓練模型,PyTorch和Keras你選誰?模型PyTorchKeras
- MNIST3_tf2.keras訓練預測TF2Keras
- Keras速查_CPU和GPU的mnist預測訓練_模型匯出_模型匯入再預測_匯出onnx並預測KerasGPU模型
- PyTorch預訓練Bert模型PyTorch模型
- 自訓練 + 預訓練 = 更好的自然語言理解模型模型
- 取出預訓練模型中間層的輸出(pytorch)模型PyTorch
- 預訓練模型 & Fine-tuning模型
- 【AI】Pytorch_預訓練模型AIPyTorch模型
- MxNet預訓練模型到Pytorch模型的轉換模型PyTorch
- 基於Theano的深度學習框架keras及配合SVM訓練模型深度學習框架Keras模型
- 自然語言處理中的語言模型預訓練方法自然語言處理模型
- 用免費TPU訓練Keras模型,速度還能提高20倍!Keras模型
- 使用Bert預訓練模型文字分類(內附原始碼)模型文字分類原始碼
- 知識增強的預訓練語言模型系列之ERNIE:如何為預訓練語言模型注入知識模型
- TorchVision 預訓練模型進行推斷模型
- TensorFlow 呼叫預訓練好的模型—— Python 實現模型Python
- 視覺化 Keras 訓練過程視覺化Keras
- 分散式訓練|horovod+keras(1)分散式Keras
- 新型大語言模型的預訓練與後訓練正規化,谷歌的Gemma 2語言模型模型谷歌Gemma
- 新型大語言模型的預訓練與後訓練正規化,Meta的Llama 3.1語言模型模型
- 新型大語言模型的預訓練與後訓練正規化,阿里Qwen模型阿里
- 模型訓練:資料預處理和預載入模型
- Findings | 中文預訓練語言模型回顧模型
- 常見預訓練語言模型簡述模型
- NLP領域預訓練模型的現狀及分析模型
- 「NLP」GPT:第一個引入Transformer的預訓練模型GPTORM模型
- COLING 2020 | CharBERT:字元敏感的預訓練語言模型字元模型
- 6-3使用GPU訓練模型GPU模型
- 人工智慧的預訓練基礎模型的分類人工智慧模型
- 通用模型、全新框架,WavLM語音預訓練模型全解模型框架