Keras 3 API 文件 / KerasTuner / 預測器 / @synchronized 裝飾器

@synchronized 裝飾器

[來源]

synchronized 函數

keras_tuner.synchronized(func, )

用於同步多線程呼叫 Oracle 函數的裝飾器。

在平行調整中,可能會有來自多個線程到 Oracle 方法(如 create_trial()update_trial()end_trial())的並行 gRPC 呼叫。為避免並行寫入數據,請使用 @synchronized 來確保呼叫是同步的,這只允許一次執行一個呼叫。

對不同 Oracle 對象的並行呼叫不會互相阻塞。對相同 Oracle 對象的相同或不同函數的並行呼叫將互相阻塞。

您可以裝飾覆蓋基類中已裝飾函數的子類函數,而無需擔心產生死結。但是,裝飾器僅支援類別中的方法,不能應用於獨立函數。

您不需要裝飾 Oracle.populate_space(),它只由已裝飾的 Oracle.create_trial() 呼叫。

範例

class MyOracle(keras_tuner.Oracle):
    @keras_tuner.synchronized
    def create_trial(self, tuner_id):
        super().create_trial(tuner_id)
        ...

    @keras_tuner.synchronized
    def update_trial(self, trial_id, metrics, step=0):
        super().update_trial(trial_id, metrics, step)
        ...

    @keras_tuner.synchronized
    def end_trial(self, trial):
        super().end_trial(trial)
        ...