擴展之Tensorflow2.0 | 18 TF2構建自定義模型
擴展之Tensorflow2.0 | 17 TFrec文件的創建與讀取
擴展之Tensorflow2.0 | 16 TF2讀取圖片的方法
擴展之Tensorflow2.0 | 15 TF2實現一個簡單的服裝分類任務
小白學PyTorch | 14 tensorboardX可視化教程
小白學PyTorch | 13 EfficientNet詳解及PyTorch實現
小白學PyTorch | 12 SENet詳解及PyTorch實現
小白學PyTorch | 11 MobileNet詳解及PyTorch實現
小白學PyTorch | 10 pytorch常見運算詳解
小白學PyTorch | 9 tensor數據結構與存儲結構
小白學PyTorch | 8 實戰之MNIST小試牛刀
小白學PyTorch | 7 最新版本torchvision.transforms常用API翻譯與講解
小白學PyTorch | 6 模型的構建訪問遍歷存儲(附代碼)
小白學PyTorch | 5 torchvision預訓練模型與數據集全覽
小白學PyTorch | 4 構建模型三要素與權重初始化
小白學PyTorch | 3 淺談Dataset和Dataloader
小白學PyTorch | 2 淺談訓練集驗證集和測試集
小白學PyTorch | 1 搭建一個超簡單的網絡
小白學PyTorch | 動態圖與靜態圖的淺顯理解
這個系列《小白學PyTorch》的所有代碼和數據集放在了公眾號【機器學習煉丹術】後臺,回復【pytorch】獲取(還在更新的呢):
機器學習煉丹術的粉絲的人工智慧交流群已經建立,目前有目標檢測、醫學圖像、時間序列等多個目標為技術學習的分群和水群嘮嗑的總群,歡迎大家加煉丹兄為好友,加入煉丹協會。微信:cyx645016617.
參考目錄:
1 模型的構建
2 結構參數的存儲與載入
3 參數的存儲與載入
4 結構的存儲與載入
本文主要講述TF2.0的模型文件的存儲和載入的多種方法。主要分成兩類型:模型結構和參數一起載入,模型的結構載入。
1 模型的構建import tensorflow.keras as keras
class CBR(keras.layers.Layer):
def __init__(self,output_dim):
super(CBR,self).__init__()
self.conv = keras.layers.Conv2D(filters=output_dim, kernel_size=4, padding='same', strides=1)
self.bn = keras.layers.BatchNormalization(axis=3)
self.ReLU = keras.layers.ReLU()
def call(self, inputs):
inputs = self.conv(inputs)
inputs = self.ReLU(self.bn(inputs))
return inputs
class MyNet(keras.Model):
def __init__ (self):
super(MyNet,self).__init__()
self.cbr1 = CBR(16)
self.maxpool1 = keras.layers.MaxPool2D(pool_size=(2,2))
self.cbr2 = CBR(32)
self.maxpool2 = keras.layers.MaxPool2D(pool_size=(2,2))
def call(self, inputs):
inputs = self.maxpool1(self.cbr1(inputs))
inputs = self.maxpool2(self.cbr2(inputs))
return inputs
model = MyNet()部分朋友可以發現,上面的代碼就是上一次課程所構建的一個自定義的網絡。
我們現在需要展示這個模型的框架:
model.build((16,224,224,3))
print(model.summary())運行結果為:
這裡需要對網絡執行一個構建.build()函數,之後才能生成model.summary()這樣的模型的描述。 這是因為模型的參數量是需要知道輸入數據的通道數的,假如我們輸入的是單通道的圖片,那麼就是:
model.build((16,224,224,1))
print(model.summary())輸出結果為:
2 結構參數的存儲與載入model.save('save_model.h5')
new_model = keras.models.load_model('save_model.h5')這裡並不能保存成功,出現這樣的錯誤:
大概的意思就是:因為你的模型不是官方的模型,是自定義的,所以並不能同時保存結構和參數。只有官方的模型可以時候上面的保存的方法,同時保存參數和權重;自定義的模型建議只保存參數
3 參數的存儲與載入model.save_weights('model_weight')
new_model = MyNet()
new_model.load_weights('model_weight')這樣子就可以保存自定義的模型了。在對應的目錄下會出現這幾個文件:
我們來看一下原來的模型和載入的模型對於同一個樣本給出的結果是否相同:
# 看一下原來的模型和載入的模型預測相同的樣本的輸出
test = tf.ones((1,8,8,3))
prediction = model.predict(test)
new_prediction = new_model.predict(test)
print(prediction,new_prediction)
>>> [[[[0.02559286]]]] [[[[0.02559286]]]]結果相同,載入的沒有問題~
4 結構的存儲與載入結構的存儲有兩種方法:
需要注意的是,上面的兩個方法和save的問題一樣,是不能用在自定義的模型中的,如果你在其中使用了自定義的Layer類,那麼只能!只能用save_weights的方式進行保存
下面依然給出這兩種方法的代碼,對於簡單的、已經封裝好的一些網絡層構成的網絡,是可以使用這些的。我個人還是常用save_weights啦
# 第一種方法
config = model.get_config()
reinitialized_model = keras.Model.from_config(config)
# 第二種方法
json_config = model.to_json()
# 把json寫的文件中
with open('model_config.json', 'w') as json_file:
json_file.write(json_config)
# 讀取本地json文件
with open('model_config.json') as json_file:
json_config = json_file.read()
reinitialized_model = keras.models.model_from_json(json_config)今天的內容就是這麼多,雖然提供了四種方法,但是對於自定義程度較高的模型,還是要使用save_weights哦~
- END -
小白學論文 | EfficientNet強在哪裡
小白學論文 | 神經網絡初始化Xavier
小白學論文 | 端側神經網絡GhostNet(2019)
小白學目標檢測 | RCNN, SPPNet, Fast, Faster
小白學圖像 | BatchNormalization詳解與比較
小白學圖像 | Group Normalization詳解+PyTorch代碼
小白學圖像 | 八篇經典CNN論文串講
圖像增強 | CLAHE 限制對比度自適應直方圖均衡化
小白學卷積 | 深入淺出卷積網絡的平移不變性
小白學卷積 | (反)卷積輸出尺寸計算
損失函數 | 焦點損失函數 FocalLoss 與 GHM
<<小白學機器學習>>
小白學ML | 隨機森林 全解 (全網最全)
小白學SVM | SVM優化推導 + 拉格朗日 + hingeLoss
小白學LGB | LightGBM = GOSS + histogram + EFB
小白學LGB | LightGBM的調參與並行
小白學XGB | XGBoost推導與牛頓法
評價指標 | 詳解F1-score與多分類F1
小白學ML | Adaboost及手推算法案例
小白學ML | GBDT梯度提升樹
小白學優化 | 最小二乘法與嶺回歸&Lasso回歸
小白學排序 | 十大經典排序算法(動圖)
雜談 | 正態分布為什麼如此常見
Adam優化器為什麼被人吐槽?
機器學習不得不知道的提升技巧:SWA與pseudo-label
<<小白面經>>
秋招總結 | 一個非Top學校的跨專業的算法應屆研究生的幾十場面試
【小白面經】快手 AI算法崗 附答案解析
【小白面經】 拼多多 AI算法崗 附帶解析
【小白面經】八種應對樣本不均衡的策略
【小白面經】之防止過擬合的所有方法
【小白面經】梯度消失爆炸及其解決方法
【小白面經】 判別模型&生成模型
<<小白健身>>
【小白健身】腹肌搓衣板化
【小白健身】8個動作練爆胸大肌
【小白健身 】背闊大作戰(下)
【小白健身】背闊大作戰(上)
【小白健身】徒手健身40個動作(gif)
【小白健身】彈力帶輕度健身gif動圖