解決同時加載多個Keras Model發(fā)生異常的問題

因為工作需要国撵,同一個進程會使用到兩個Keras Model, 我是通過寫了一個KerasUtil類,然后創(chuàng)建了多個此類對象,以加載不同的Model:

kerasutil_merge = KerasUtil(rawtextpath=r'va_new/model/rawcontent/vamergebinary.csv',
                            lstmmodelpath=r'va_new/model/vamergebinarybilstm.h5',
                            modeltype='bilstm')
kerasutil_added = KerasUtil(rawtextpath=r'va_new/model/rawcontent/vaaddedbinary.csv',
                      lstmmodelpath=r'va_new/model/vaaddedbinarybilstm.h5',
                      modeltype='bilstm')

但是在運行的時候遇到問題了,如果兩個model同時加載,并做predict的嘗試右遭,那么就發(fā)生疑似多model加載導致的issue:

Tensor embedding_2_input:0, specified in either feed_devices or fetch_devices was not found in the Graph
Exception ignored in: <bound method BaseSession._Callable.del of <tensorflow.python.client.session.BaseSession._Callable object at 0x000001B47CA91240>>
Traceback (most recent call last):
File "D:\python36\lib\site-packages\tensorflow\python\client\session.py", line 1398, in del
self._session._session, self._handle, status)
File "D:\python36\lib\site-packages\tensorflow\python\framework\errors_impl.py", line 519, in exit
c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.InvalidArgumentError: No such callable handle: 1875572934464

一開始看到這個是慌張的做盅,因為之前僅僅使用一個model的時候,是沒有問題的窘哈,只是Flask提供Web API加載遇到了一些問題(請見我另一篇簡書)
仔細想了想吹榴,應該是底層的Tensorflow在處理多Model切換時,懵逼了滚婉,是否每次predict的時候图筹,遇到異常就嘗試重新load呢?
代碼修復的嘗試如下:

    def predictcategory(self, sentence, threshold=0.5):
        self.initialforlstm()
        cleantext = gensimutil.cleardatafordoc2vector(sentence)
        twt = [cleantext]
        twt = self.tokenizer.texts_to_sequences(twt)
        # padding the tweet to have exactly the same shape as `embedding_2` input
        twt = pad_sequences(twt, maxlen=80, dtype='int32', value=0)
        # To avoid below exception:Tensor embedding_1_input:0,
        # specified in either feed_devices or fetch_devices was not found in the Graph
        try:
            categoryresult = self.lstmmodel.predict(twt, batch_size=1, verbose=2)[0]
        except Exception as e:
            logger.info(e)
            keras.backend.clear_session()
            self.lstmmodel = load_model(self.modelpath)
            categoryresult = self.lstmmodel.predict(twt, batch_size=1, verbose=2)[0]
        logger.info('raw sentence: {0}'.format(sentence))
        boolDict = {0: 'Negative', 1: 'Positive'}
        if len(categoryresult) > 2:
            logger.info('category is {0}, similarity: {1}'.format(self.categorydict[np.argmax(categoryresult)+1],
                                                            categoryresult[np.argmax(categoryresult)]))
            result = {'categorycode': np.argmax(categoryresult) + 1,
                      'categoryname': self.categorydict[np.argmax(categoryresult)+1],
                      'similarity': categoryresult[np.argmax(categoryresult)]}
        else:
                result = 0
                if np.argmax(categoryresult) == 1 and categoryresult[np.argmax(categoryresult)] > threshold:
                    result = 1
                logger.info('category is {0}, similarity: {1}'.format(boolDict[result],
                                                                      categoryresult[result]))
                result = {'categorycode': result,
                          'categoryname': boolDict[result],
                          'similarity': categoryresult[result]}

        return result

其中让腹,這個是關(guān)鍵远剩,即蒙圈了,就重新加載模型骇窍,效率或許低了些瓜晤,但能夠讓程序run下去

        try:
            categoryresult = self.lstmmodel.predict(twt, batch_size=1, verbose=2)[0]
        except Exception as e:
            logger.info(e)
            keras.backend.clear_session()
            self.lstmmodel = load_model(self.modelpath)
            categoryresult = self.lstmmodel.predict(twt, batch_size=1, verbose=2)[0]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市腹纳,隨后出現(xiàn)的幾起案子痢掠,更是在濱河造成了極大的恐慌,老刑警劉巖嘲恍,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件足画,死亡現(xiàn)場離奇詭異,居然都是意外死亡佃牛,警方通過查閱死者的電腦和手機淹辞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吁脱,“玉大人桑涎,你說我怎么就攤上這事彬向〖婀保” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵娃胆,是天一觀的道長遍希。 經(jīng)常有香客問我,道長里烦,這世上最難降的妖魔是什么凿蒜? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮胁黑,結(jié)果婚禮上废封,老公的妹妹穿的比我還像新娘。我一直安慰自己丧蘸,他們只是感情好漂洋,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般刽漂。 火紅的嫁衣襯著肌膚如雪演训。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天贝咙,我揣著相機與錄音样悟,去河邊找鬼。 笑死庭猩,一個胖子當著我的面吹牛窟她,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播眯娱,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼礁苗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了徙缴?” 一聲冷哼從身側(cè)響起试伙,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎于样,沒想到半個月后疏叨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡穿剖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年蚤蔓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糊余。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡秀又,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贬芥,到底是詐尸還是另有隱情吐辙,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布蘸劈,位于F島的核電站昏苏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏威沫。R本人自食惡果不足惜贤惯,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望棒掠。 院中可真熱鬧孵构,春花似錦、人聲如沸烟很。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至精盅,卻和暖如春帽哑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背叹俏。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工妻枕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粘驰。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓屡谐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蝌数。 傳聞我的和親對象是個殘疾皇子愕掏,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容