我正在研究 A_K_Nain 撰寫的 keras 示例中的 tensorflow ocr 模型。該模型使用自定義物件(CTC 層)。它在網站上:https ://keras.io/examples/vision/captcha_ocr/ 我使用我的資料集訓練了模型,然后預測模型的結果是完美的。我想保存并加載這個模型,我試過了。但是我遇到了一些錯誤,所以我在 CTC Layer 類中附加了這段代碼。
def get_config(self):
config = super(CTCLayer, self).get_config()
config.update({"name":self.name})
return config
之后我試圖保存整個模型和重量,但沒有任何效果。所以我申請了2個保存點。第一種方式。
history = model.fit(
train_dataset,
validation_data=validation_dataset,
epochs=70,
callbacks=[early_stopping],
)
model.save('./model/my_model')
---------------------------------------
new_model = load_model('./model/my_model', custom_objects={'CTCLayer':CTCLayer})
prediction_model = keras.models.Model(
new_model .get_layer(name='image').input, new_model .get_layer(name='dense2').output
)
第二種方式。
prediction_model = keras.models.Model(
model.get_layer(name='image').input, model.get_layer(name='dense2').output
)
prediction_model.save('./model/my_model')
這些仍然沒有奏效。它沒有出錯,但預測結果很糟糕。當訓練和保存和加載一起執行時,可以獲得準確的結果。如果我在沒有一起訓練的情況下加載相同的模型,結果會很糟糕。
我如何在不每次訓練的情況下使用這個模型?請幫我。
uj5u.com熱心網友回復:
問題不是來自張量流。在captcha_ocr教程中,characters是一個集合,集合是無序的。因此,從字符到整數的映射使用StringLookup取決于筆記本的當前運行。這就是為什么你在沒有重新訓練的情況下在另一個筆記本上使用它時會變得垃圾,映射不一樣!
一種解決方案是使用有序串列而不是集合 for characters:
characters = sorted(list(set([char for label in labels for char in label])))
請注意,set此處的運算子允許獲取每個字符的唯一版本,然后將其轉換回串列并進行排序。然后它將在任何腳本/筆記本上作業而無需重新訓練(使用相同的公式)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/475728.html
