獲取和生成基於TensorFlow的MobilNet預訓練模型
從TensorFlow-Slim image classification model library中找到我們要使用的MobileNet_v2_1.0_224^*(1.0-阿爾法值,244-輸入圖片shape),下載mobilenet_v2_1.0_224.tgz檔案,其中內含:
- mobilenet_v2_1.0_224.ckpt.data-00000-of-00001
- mobilenet_v2_1.0_224.ckpt.index
- mobilenet_v2_1.0_224.ckpt.meta
- mobilenet_v2_1.0_224.tflite
- mobilenet_v2_1.0_224_eval.pbtxt
- mobilenet_v2_1.0_224_frozen.pb
- mobilenet_v2_1.0_224_info.txt
mobilenet_v2_1.0_224.ckpt.data-00000-of-00001儲存模型權重,mobilenet_v2_1.0_224.ckpt.meta儲存模型圖的流程,mobilenet_v2_1.0_224.ckpt.index儲存模型結構的變數與引數間的索引對應關係,mobilenet_v2_1.0_224_frozen.pb凍結的PB檔案,mobilenet_v2_1.0_224.tflite凍結的tflite檔案。
在Test6_mobilenet下新建目錄pretain_model,將以下三個檔案放入其中
- mobilenet_v2_1.0_224.ckpt.data-00000-of-00001
- mobilenet_v2_1.0_224.ckpt.meta
- mobilenet_v2_1.0_224.ckpt.index
生成預訓練模型程式碼,執行後在當前路徑下生成兩個檔案:
- pretrain_weights.ckpt.data-00000-of-00001
- pretrain_weights.ckpt.index
import tensorflow as tf
def rename_var(ckpt_path, new_ckpt_path, num_classes=5):
with tf.Graph().as_default(), tf.compat.v1.Session().as_default() as sess:
var_list = tf.train.list_variables(ckpt_path)
new_var_list = []
for var_name, shape in var_list:
# print(var_name)
#filter 不需要的層結構
if var_name in except_list:
continue
#filter所有有關優化器info
if "RMSProp" in var_name or "Exponential" in var_name:
continue
#層結構的名稱轉換
var = tf.train.load_variable(ckpt_path, var_name)
new_var_name = var_name.replace('MobilenetV2/', "")
new_var_name = new_var_name.replace("/expand/weights", "/expand/Conv2d/weights")
new_var_name = new_var_name.replace("Conv/weights", "Conv/Conv2d/kernel")
new_var_name = new_var_name.replace("Conv_1/weights", "Conv_1/Conv2d/kernel")
new_var_name = new_var_name.replace("weights", "kernel")
new_var_name = new_var_name.replace("biases", "bias")
first_word = new_var_name.split('/')[0]
if "expanded_conv" in first_word:
last_word = first_word.split('expanded_conv')[-1]
if len(last_word) > 0:
new_word = "inverted_residual" + last_word + "/expanded_conv/"
else:
new_word = "inverted_residual/expanded_conv/"
new_var_name = new_word + new_var_name.split('/', maxsplit=1)[-1]
print(new_var_name)
re_var = tf.Variable(var, name=new_var_name)
new_var_list.append(re_var)
re_var = tf.Variable(tf.keras.initializers.he_uniform()([1280, num_classes]), name="Logits/kernel")
new_var_list.append(re_var)
re_var = tf.Variable(tf.keras.initializers.he_uniform()([num_classes]), name="Logits/bias")
new_var_list.append(re_var)
tf.keras.initializers.he_uniform()
saver = tf.compat.v1.train.Saver(new_var_list)
sess.run(tf.compat.v1.global_variables_initializer())
saver.save(sess, save_path=new_ckpt_path, write_meta_graph=False, write_state=False)
# 不需要的層結構
# 'MobilenetV2/Logits/Conv2d_1c_1x1/biases', 'MobilenetV2/Logits/Conv2d_1c_1x1/weights'
# MobilenetV2的全連線層偏置和權重
except_list = ['global_step', 'MobilenetV2/Logits/Conv2d_1c_1x1/biases', 'MobilenetV2/Logits/Conv2d_1c_1x1/weights']
ckpt_path = './pretain_model/mobilenet_v2_1.0_224.ckpt'
new_ckpt_path = './pretrain_weights.ckpt'
num_classes = 5
rename_var(ckpt_path, new_ckpt_path, num_classes)
相關文章
- TensorFlow 呼叫預訓練好的模型—— Python 實現模型Python
- TensorFlow on Android:訓練模型Android模型
- 基於Mindspore2.0的GPT2預訓練模型遷移教程GPT模型
- 飛槳帶你瞭解:基於百科類資料訓練的 ELMo 中文預訓練模型模型
- 自訓練 + 預訓練 = 更好的自然語言理解模型模型
- 人工智慧的預訓練基礎模型的分類人工智慧模型
- 模型訓練:資料預處理和預載入模型
- 使用PaddleFluid和TensorFlow訓練序列標註模型UI模型
- 火山引擎釋出大模型訓練影片預處理方案,已應用於豆包影片生成模型大模型
- PyTorch預訓練Bert模型PyTorch模型
- 如何將keras訓練的模型轉換成tensorflow lite模型Keras模型
- TensorFlow2.0教程-使用keras訓練模型Keras模型
- 使用LSTM模型做股票預測【基於Tensorflow】模型
- 預約直播 | 基於預訓練模型的自然語言處理及EasyNLP演算法框架模型自然語言處理演算法框架
- 【預訓練語言模型】 使用Transformers庫進行BERT預訓練模型ORM
- 【AI】Pytorch_預訓練模型AIPyTorch模型
- 預訓練模型 & Fine-tuning模型
- NLP生成任務超越BERT、GPT!微軟提出通用預訓練模型MASSGPT微軟模型
- ML2021 | (騰訊)PatrickStar:通過基於塊的記憶體管理實現預訓練模型的並行訓練記憶體模型並行
- 如何評估一個回答的好壞——BERTScore 基於預訓練模型的相似度度量方式模型
- 基於 Fluid+JindoCache 加速大模型訓練的實踐UI大模型
- 【預訓練語言模型】使用Transformers庫進行GPT2預訓練模型ORMGPT
- MxNet預訓練模型到Pytorch模型的轉換模型PyTorch
- 知識增強的預訓練語言模型系列之ERNIE:如何為預訓練語言模型注入知識模型
- 基於飛槳PaddlePaddle的多種影像分類預訓練模型強勢釋出模型
- 瀏覽器中的機器學習:使用預訓練模型瀏覽器機器學習模型
- 基於Theano的深度學習框架keras及配合SVM訓練模型深度學習框架Keras模型
- 在 C/C++ 中使用 TensorFlow 預訓練好的模型—— 間接呼叫 Python 實現C++模型Python
- 在 C/C++ 中使用 TensorFlow 預訓練好的模型—— 直接呼叫 C++ 介面實現C++模型
- 通過NMT訓練出通用的語境詞向量:NLP中的預訓練模型?模型
- 透過NMT訓練出通用的語境詞向量:NLP中的預訓練模型?模型
- 既能理解又能生成自然語言,微軟提出統一預訓練新模型UniLM微軟模型
- 生成式預訓練語言模型能否視作閉卷問答的知識庫?模型
- 孟子小樣本和檢索式預訓練模型進展模型
- TorchVision 預訓練模型進行推斷模型
- 常見預訓練語言模型簡述模型
- NLP領域預訓練模型的現狀及分析模型
- keras中VGG19預訓練模型的使用Keras模型