你好,
我有一個問題與模型注冊表。我不確定如果我注冊模型不正確或者´s一個bug。
這裏是一些代碼片段:
熊貓作為pd導入導入mlflow mlflow進口。keras mlflow進口。從mlflow.tracking tensorflow。客戶端從tensorflow進口MlflowClient。keras導入模型,層,跑龍套,優化器X = pd。DataFrame ({“f1”: (1、2、3),“f2”: (4、5、6),“f3”: [7 8 9]}) y = pd。DataFrame({“目標”:(4、5、6)})_layers = [] normalize_layer =層。標準化(軸= 1,name = "正常化")normalize_layer.adapt (X) _layers.append (normalize_layer) h1_layer =層。密度(name = " h1,單位= 2,激活=“relu”) _layers.append h1_layer out_layer =(層。密度(name = "輸出",單位= y。形狀[1],激活= "線性"))_layers.append (out_layer) denormalize_layer =層。標準化(軸= 1,反= True, name =“反規範化”)denormalize_layer.adapt (y) _layers.append (denormalize_layer)模型= models.Sequential(層= _layers)與mlflow.start_run (run_name = keras_bug): mlflow.tensorflow.autolog () model.compile(優化器=“亞當”,損失=“美”)曆史=模型。fit (X, y,時代= 100,洗牌= True, validation_split = 0.33, verbose = 1,)
我使用一些隨機數據和建立標準化和反規範化模型層。兩層都適應X或y。
通常這些層存儲平均值和標準偏差(訓練集)規範化以下數據,並使用這些值。
後來我在磚model-registry注冊運行。
這是預測的培訓-不加載模型:
model.predict (X)陣列([[3.9997296],[4.1370635],[3.6655028]],dtype = float32)
現在我使用run_id和加載登錄模式:
logged_model = ' 33 af506cd02d4a56b525134588c5c30a運行:/ /模型”loaded_model = mlflow.pyfunc.load_model (logged_model) loaded_model.predict (X)
這些結果:
1 0 0 -6.247854 -6.749195 -6.041854 - 2
結果的結果相比是完全不同的訓練模式。
´預測是正確的,如果我不使用歸一化層所以我認為平均值和標準偏差不存儲正確注冊模型。
我試圖讓loaded_model的意思但我不能找到一個方法來得到這些值。
這是一個警告我收到裝船時模型:
/磚/ python / lib / python3.9 /網站/ keras /後端。py: 451: UserWarning:“tf.keras.backend。set_learning_phase”是棄用,2020-10-11後將被刪除。要更新它,隻需通過一個真/假值的“培訓”的論點“__call__”圖層的方法或模型。
我試圖設置兩層可訓練的=假前的注冊:
normalize_layer.trainable = False
但這並不能解決問題。
我的環境:
ML-Runtime 12.1
ML-Runtime 12.1使用tensorflow 2.10。我知道tensorflow 2.10反規範化層中有一個bug。這個bug是tf2.11解決,但這是另一個問題,用這種行為無關。
有人有一個想法我如何解決這個問題?