keras上手系列之: 模型的儲存
如何將訓練好的網路進行儲存以便以後使用, 進行後續的研究呢?
首先,定義一個簡單的LSTM模型:
from keras.models import Sequential
from keras.layers import LSTM, Dense
model = Sequential()
model.add(LSTM(4,input_shape=(1,8)))
model.add(Dense(1))
整體儲存模型及引數
首先,安裝python的h5py包.
sudo pip3 install h5py
之後呼叫model.save(filepath)將Keras模型和權重儲存在一個HDF5檔案中,該檔案將包含:
- 模型的結構,以便重構該模型
- 模型的權重
- 訓練配置(損失函式,優化器等)
- 優化器的狀態,以便於從上次訓練中斷的地方開始
使用keras.models.load_model(filepath)
from keras.models import load_model
model.save('my_model.h5') # creates a HDF5 file 'my_model.h5'
del model # deletes the existing model
# returns a compiled model identical to the previous one
model = load_model('my_model.h5')
只儲存模型的結構
可以用model.to_jason()將模型序列化儲存為json檔案.
# save as JSON
json_string = model.to_json()
例如上面LSTM網路的json_string就是:
json_string
Out[10]: '{"class_name": "Sequential", "config": [{"class_name": "LSTM", "config": {"name": "lstm_1", "trainable": true, "batch_input_shape": [null, 1, 8], "dtype": "float32", "return_sequences": false, "return_state" : false, "go_backwards": false, "stateful": false, "unroll": false, "implementation": 0, "units": 4, "activation": "tanh", "recurrent_activation": "hard_sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}}, "recurrent_initializer": {"class_name": "Orthogonal", "config": {"gain": 1.0, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "unit_forget_bias": true, "kernel_regularizer": null, "recurrent_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "recurrent_constraint": null, "bias_constraint": null, "dropout": 0.0, "recurrent_dropout": 0.0}}, {"class_name": "Dense", "config": {"name": "dense_1", "trainable": true, "units": 1, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "VarianceScaling", "config": {"scale": 1.0, "mode": "fan_avg", "distribution": "uniform", "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}], "keras_version": "2.0.8", "backend": "tensorflow"}'
裡面記錄了網路的整體結構, 各個層的引數設定等資訊. 將json字串儲存到檔案.
open('my_model_architecture.json','w').write(json_string)
當然,你也可以從儲存好的json檔案或yaml檔案中載入模型:
# 讀取json檔案
from keras.models import model_from_json
json_string = open('my_model_architecture.json').read()
model = model_from_json(json_string)
除了json格式,還可以儲存為yaml格式的字串:
# save as YAML
yaml_string = model.to_yaml()
# 類似地,讀取yaml檔案
from keras.models import model_from_yaml
model = model_from_yaml(yaml_string)
儲存模型權重等配置資訊
經過調參後網路的輸出精度比較滿意後,可以將訓練好的網路權重引數儲存下來.
可通過下面的程式碼利用HDF5進行儲存
model.save_weights(‘my_model_weights.h5’)
以後用的時候可以像這樣載入模型:
model.load_weights(‘my_model_weights.h5’)
如果你需要載入權重到不同的網路結構(有些層一樣)中,例如fine-tune或transfer-learning,你可以通過層名字來載入模型:
model.load_weights('my_model_weights.h5', by_name=True)
首先在建模時,最好對每一層都指定名字, 例如:
# 定義模型
model = Sequential()
model.add(LSTM(4, input_shape=(1, 8), name="lstm_old"))
model.add(Dense(1, name="dense_old"))
...
model.save_weights('my_model_weights.h5')
# 新模型, 過載了前一個模型訓練好的LSTM層
model_new = Sequential()
model_new.add(LSTM(4, input_shape=(1, 8), name="lstm_old")) # will be loaded
model_new.add(Dense(10, name="dense_new")) # will not be loaded
# 載入LSTM層訓練好的引數
model.load_weights('my_model_weights.h5', by_name=True)
相關推薦
keras上手系列之: 模型的儲存
如何將訓練好的網路進行儲存以便以後使用, 進行後續的研究呢? 首先,定義一個簡單的LSTM模型: from keras.models import Sequential from keras.layers import LSTM, Dense model
機器學習實踐(十六)—sklearn之模型儲存和載入
一、sklearn - 模型的儲存和載入 - API from sklearn.externals import joblib 儲存 joblib.dump(rf, ‘test.pkl’) 載入 estimator
redis 原理系列之--字串儲存的實現原理(1)
背景 redis功能強大,幾乎已經成了現代大中型服務必備的快取技術了。 除了十分給力的快取功能,redis當做訊息佇列,資料庫也有著不錯的表現。 我們都知道,redis 有五種資料型別,string,list, hash, set 和zset。 其中 最基本的,同時也是最常用的 就是string了。 本
Spring MVC系列之模型繫結(SpringBoot)(七)
前言 上一節我們在SpringBoot中啟用了Spring MVC最終輸出了HelloWorld,本節我們來講講Spring MVC中的模型繫結,這個名稱來源於.NET或.NET Core,不知是否恰當,我們暫且這樣理解吧。 @RequestParam VS @PathVariable &n
keras系列之儲存與複用模型
keras 模型儲存與複用 這個部落格寫的很好,大體上參考這個 注意checkpoint的使用 ############################### from keras.models import load_model model.save('m
5Python全棧之路系列之Django模型續
模型續Python全棧之路系列之Django模型續連表操作一對一在app的models.py文件內添加以下內容用戶創建一對多關系的表:from django.db import models # Create your models here. class UserType(models.Model):
Tensorflow之模型引數的Saver儲存讀取
一、Saver儲存 import tensorflow as tf import numpy as np #定義W和b W = tf.Variable([[1,2,3],[3,5,6]],dtype = tf.float32,name = 'weight') b = tf.Variable([
MySQL基礎系列之 儲存過程和函式
摘要:儲存過程和函式是事先經過編譯並存儲在資料庫中的一段SQL語句的集合 儲存過程無返回值,函式有返回值 儲存過程的引數可以使用IN、OUT、INOUT,函式只能使用IN 建立儲存過程 CREATE PROCEDURE 建立函式使用 CREATE FUNCTION 使用CALL語句來呼叫
長短期記憶(LSTM)系列_3.1~3.3、第一個LSTM小例子:Keras中長短期記憶模型的5個核心步驟(python)
本文是演示了一個最簡單的LSTM模型的構建,以0.1~0.9序列為例,做了一個預測的小例項,文章最後我新增了一個測試集,重新使用訓練的模型進行一次預測,詳細程式碼以及註釋見文末。 後續的3.2和3.3課程是一組課程的學習目錄,以及作者自己新書的推薦,3.2章節會在後續學習中更新
MySQL基礎系列之 記一次利用儲存過程實現2600萬資料水平分表
日常開發中我們經常會遇到大表的情況,所謂的大表是指儲存了百萬級乃至千萬級條記錄的表。這樣的表過於龐大,導致資料庫在查詢和插入的時候耗時太長,效能低下,如果涉及聯合查詢的情況,效能會更加糟糕。分表的目的就是減少資料庫的負擔,提高資料庫的效率,通常點來講就是提高表的增刪改查效率,本文將介紹我
機器學習實戰系列:sklearn 中模型儲存的兩種方法
一、 sklearn中提供了高效的模型持久化模組joblib,將模型儲存至硬碟。 from sklearn.externals import joblib #lr是一個LogisticRegression模型 joblib.dump(lr, 'lr.model') lr =
無監督學習-聚類系列之常見模型
聚類是一個大的家族,常見的分類有6種,而各種聚類又有許多變型,這裡總結下常見聚類及其原理。在此只是為了方便自己記憶而寫的總結,當中有借鑑一些前輩的筆記,感激前輩。 1、劃分聚類: k—means演算法步驟: (1)提前假設k個簇,對於實際問題會有一些啟發式的選取
Keras模型儲存筆記
整理自Keras官方文件 https://keras-cn.readthedocs.io/en/latest/for_beginners/FAQ/#save_model https://keras-cn.readthedocs.io/en/latest/other/c
tensorflow 之 模型的儲存(save)、恢復/載入(restore)
1、什麼是 tensorflow 模型 當你訓練完一個神經網路,你可能會想要儲存這個網路,以便將來拿來使用或直接用於其他資料的 deploy, tensorflow 模型包括:已訓練並優化的權重引數,網路結構和 graph。 tensorflow 模型檔案包括兩大塊:
關於 keras.callbacks設定模型儲存策略
keras.callbacks.ModelCheckpoint(self.checkpoint_path, verbose=0, save_weights_only=True,mode="max",save_best_only=True
theano學習之模型的儲存和提取
今天學習如何儲存神經網路,以方便日後可以直接提取使用。 儲存的方式是我們可以先把神經網路的引數,比如說 weights 還有 bias 儲存起來,再重新定義神經網路的結構,使用模型的時候需要把引數 set 到結構中去。 儲存和提取的方法是利用 shared 變數的 get 功能,拿出變數值儲
領域驅動系列四之模型驅動
1、常規以類圖作為領域模型開發存在的問題 傳統型以技術為驅動的團隊,往往喜歡通過類圖來展示產品的模型,這樣的模型往往存N個物件,這些物件往往存在複雜的關聯,產品的創始人,可能能理解整個產品的架構思路,但是如果是新成員,想通過類圖去了解該產品,那幾乎是不可能的.往往最後還是需要領域專家進行溝通,在結合程式碼,
keras上手之:與tensorflow混合程式設計 (tensorboard)
tensorflow具備許多優秀的函式和功能,比如tensorboard,keras作為tensorflow的高階API, 封裝很多tensorflow的程式碼,使得程式碼模組化,非常方便。 當然,由於keras的模型和層與tensorflow的張量高度相容,可以用kera
Keras框架訓練模型儲存及再載入
實驗資料MNIST 初次訓練模型並儲存 import numpy as np from keras.datasets import mnist from keras.utils import n
keras模型儲存的3種形式
目錄 一、儲存整個模型 二、儲存模型結構 三、儲存模型權重 一、儲存整個模型 model.save(filepath)將Keras模型和權重儲存在一個HDF5檔案中,該檔案將包含: 模型的結構 模型的權重 訓練配置(損失函式,優化器,準確率等) 優