1. 程式人生 > >Keras 多GPU下模型和引數儲存Modelcheckpoint callback報錯問題以及在單GPU/CPU下載入

Keras 多GPU下模型和引數儲存Modelcheckpoint callback報錯問題以及在單GPU/CPU下載入

儲存

多GPU下無法直接儲存多GPU模型結構和引數,而應該使用template model進行儲存

keras文件:To save the multi-gpu model, use .save(fname) or .save_weights(fname) with the template model (the argument you passed to multi_gpu_model), rather than the model returned by multi_gpu_model.

model = get_model()
paralleled_model=multi_gpu_model(model1,gpus=num_gpu)
paralleled_model.compile
() paralleled_model.fit() model.save() # 用template model 儲存引數

Modelcheckpoint callback 報錯
Modelchecpoint callback函式無法呼叫也是因為儲存時呼叫的是paralleled_model.save()導致的。
解決方法一:在modelcheckpoint裡引數加上save_weights_only=True後,只會儲存模型權重,但是儲存的模型只能在同樣數量的GPU上載入,而沒辦法再單GPU下載入。

解決方法二自定義Callback函式,將callback函式中的paralle model 置為 template model

class ParallelModelCheckpoint(ModelCheckpoint):
    def __init__(self,model,filepath, monitor='val_loss', verbose=0,
                 save_best_only=False, save_weights_only=False,
                 mode='auto', period=1):
        self.single_model = model
        super(ParallelModelCheckpoint,self).__init__(filepath, monitor, verbose,save_best_only, save_weights_only,mode, period)

    def
set_model(self, model):
super(ParallelModelCheckpoint,self).set_model(self.single_model) check_point = ParallelModelCheckpoint(single_model ,'best.hd5')

載入

多GPU下儲存的權重無法在單GPU/CPU下執行,預測時可以建立多GPU模型後先匯入多GPU的權重而用template model 進行predict:

model = get_model()
paralleled_model=multi_gpu_model(model,gpus=num_gpu)
paralleled_model.load_weights("weights_multi_gpu.h5") # 此時model也自動載入了權重,可用model進行預測
model.predict()

相關推薦

Keras GPU模型引數儲存Modelcheckpoint callback問題以及GPU/CPU載入

儲存 多GPU下無法直接儲存多GPU模型結構和引數,而應該使用template model進行儲存 keras文件:To save the multi-gpu model, use .save(fname) or .save_weights(fna

keras、pytorch模型引數儲存

這篇博文主要簡單介紹深度學習框架keras和pytorch的模型儲存方法和模型引數儲存方法。 keras: import keras form keras.models import load_model,Sequential,Model,Input f

Keras如何儲存載入訓練好的模型引數

1,儲存模型: my_model = create_model_function( ...... ) my_model.compile( ...... ) my_model.fit( ...... ) model_name . save( filepath, ove

Python機器學習筆記:深入理解Keras中序貫模型函式模型

  先從sklearn說起吧,如果學習了sklearn的話,那麼學習Keras相對來說比較容易。為什麼這樣說呢?   我們首先比較一下sklearn的機器學習大致使用流程和Keras的大致使用流程: sklearn的機器學習使用流程: 1 2 3 4

PyTorch學習:載入模型引數

pytorch的模型和引數是分開的,可以分別儲存或載入模型和引數。 pytorch有兩種模型儲存方式: 一、儲存整個神經網路的的結構資訊和模型引數資訊,save的物件是網路net 二、只儲存神經網路的訓練模型引數,save的物件是net.state_dict() 對應

安裝PycharmAnaconda問題(包含目錄只顯示Anaconda Prompt的情況等)

這幾天學習python的過程中,安裝和使用Pycharm or Anaconda出現的問題,結合自己親身體驗和網路搜尋(網路上嘗試過一些小夥伴的方法,覺得還不錯有整理進來,謝謝小夥伴的分享。)總結如下幾個方面: 1、安裝過程中出現failed to create anacoda men

maven開發tomcat部署war包,沒有但是訪問不了站點任何資源介面。

就這樣一直載入這,沒有任何反應,控制檯也不報任何錯誤。困擾了許久,百度無果。只能自己慢慢的一步一步的找問題的根源。 先發現將SpringMvc的前端控制器配置刪除後,就能夠訪問站點。但是不配置前端控制器,就意味著任何請求都進不去。 無奈只能開啟SpringMvc的配置檔案

tiny6410的Qt4的移植第一個Qt4軟體的執行以及如何在qtopia執行自己的qt4程式

開發環境:fedora9   linux-2.6.38   arm-linux-gcc 4.5.1 基於tiny6410的軟硬體環境,tslib用的開發板檔案系統自帶的,用的一線校準,基本上是按照《M

在Ubuntu安裝解除安裝網易雲音樂以及出現的問題

1.網易雲音樂  開啟網易雲連結,點選Lunix版本,選擇合適的版本檢視其下載的deb壓縮包所在的位置2.開啟終端,輸入 sudo dpkg -i /home/chen/下載/netease-cloud-music_1.1.0_amd_ubuntu.deb在具體下載的過程中要

關於在ubuntueclipse中c++11支援編譯執行c++11的解決方法

最近準備升級專案中的c++執行緒部分程式碼用c++11簡單重構一下,結果測試demo直接就報錯~ 百度和谷歌了一部分還是沒有解決這個問題~ 最後經過研究eclipse的自動編譯~終於搞定了~ 首先按照網上說的~ http://hkllzh.iteye.com/blog/1

linuxweblogic11g成功安裝後,啟動Getting boot identity from user

tro ace author reason tac ica ons pst pri <2015-7-1 下午05時46分33秒 CST> <Info> <Management> <BEA-141107> <Versi

CentOS7使用rpm-gpg-key-epel-6解決方法

centos7今天遇到一個在CentOS7下用rpm-gpg-key-epel-6的文件安裝yum install gridengine-6.2u5-10.el6.4.x86_64 gridengine-devel-6.2u5-10.el6.4.x86_64 gridengine-execd-6.2u5-10

linux centos環境,perl使用DBD::Oracle遇到Can't locate DBDOracle.pm in @INC 的解決辦法

acp right tps 名稱 ica 補充 str htm 遠程數據庫 前言 接手前輩的項目,沒有接觸、安裝、使用過perl和DBD::Oracle,也沒有相關的文檔記錄,茫茫然不知所措~~。一開始發現這個問題,就想著迅速解決,就直接在google上搜報錯信息,搜索的

面對對象之私有屬性,以及、雙劃線 | Pythoon

指定 src 防止 什麽 mage 對象 class .com img # 在很多程序中會遇到__name,_name的標識符,在類中,如果屬性帶有雙 # 下劃線,表示私有屬性,通俗的講,就是不能在類命名空間外被直接調用,但是 # 可以通過方法來調用。 #

RN關於Windows電腦上創建 移植到Mac react-native-vector-icons

span fail 目錄 關於 src 方法 pes gets error: 1 進入項目更新npm 正如jerry指出的那樣,這是NPM中的一個錯誤。現在有一個修復程序可用。您可以使用更新NPM npm i -g npm。刪除了React Native,npm rem

線程中,ResultSet為空,空指針

resultset JD 沖突 查詢語句 查詢 多個 通過 res 好的 最近在數據庫查詢數據時,由於數據量太大,使用了多線程,通過線程池建了好幾個線程,然後調用了一個封裝好的jdbc查詢語句。 結果在多線程中,ResultSet報錯空指針。 仔細查閱後,才發現多個線程訪問

Ubuntu系統,pip3安裝python3的pymysql包 的問題

sudo pip3 list  檢視安裝的包列表 如上圖, pip升級到18.1版本. 使用pip3 出現以下錯誤: Traceback (most recent call last): File “/usr/bin/pip3”, line 9, in from pip

關於在JSP中寫【if】【else】語句Syntax error on token "else", delete this token

這裡轉載一篇文章:https://blog.csdn.net/sinat_37062120/article/details/79208949 jsp中插入java程式碼 <%if (***)%> <%=***%> <%else %> <%=***%&

dotnetcore ef 呼叫個數據庫時使用者命令執行操作

dotnetcore ef 呼叫多個數據庫時使用者命令執行操作報錯 1、多個DbContext 時報錯: 報錯: More than one DbContext was found. Specify which one to use. Use the '-Context' parameter for

執行儲存過程,提示 找不到儲存過程

原因: SQL Server 客戶端, 在連線到 SQL Server 資料庫以後。會自動讀取 資料庫的 資料字典資訊。也就是 當前資料庫,有哪些表/欄位/檢視/儲存過程等基礎資訊。儲存在客戶端的記憶體裡面。這樣。當你在客戶端輸入 SQL 語句的時候,輸入 表名字.會自動彈出 這個表的欄位列表,