第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

更改 Keras 模型變量

更改 Keras 模型變量

明月笑刀無情 2023-06-27 14:10:28
我想逐漸增加 Keras 模型中用于計(jì)算損失的系數(shù)。變量值基于當(dāng)前紀(jì)元。但是,當(dāng)我想設(shè)置該值時(shí),出現(xiàn)以下錯(cuò)誤:float object has no attribute dtype我的代碼:def warm_up(epoch, logs):    new_value=  tf.keras.backend.variable(np.array(1.0, dtype=np.float32), dtype=tf.float32)    tf.keras.backend.set_value(model.variable1, new_value)callback = tf.keras.callbacks.LambdaCallback(on_epoch_begin=warm_up)model.fit(..., callbacks = [callback])如何在訓(xùn)練期間更改自定義 Keras 模型中的變量?我使用的是 Tensorflow 2.2。追溯:\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py in _method_wrapper(self, *args, **kwargs)     64   def _method_wrapper(self, *args, **kwargs):     65     if not self._in_multi_worker_mode():  # pylint: disable=protected-access---> 66       return method(self, *args, **kwargs)     67      68     # Running inside `run_distribute_coordinator` already.~\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)    836       for epoch, iterator in data_handler.enumerate_epochs():    837         self.reset_metrics()--> 838         callbacks.on_epoch_begin(epoch)    839         with data_handler.catch_stop_iteration():    840           for step in data_handler.steps():~\Anaconda3\lib\site-packages\tensorflow\python\keras\callbacks.py in on_epoch_begin(self, epoch, logs)    347     logs = self._process_logs(logs)    348     for callback in self.callbacks:--> 349       callback.on_epoch_begin(epoch, logs)    350     self._reset_batch_timing()    351 c:\Users\..\training.py in warm_up(epoch, logs)    379 def warm_up(epoch, logs):    380     test =  tf.keras.backend.variable(np.array(1.0, dtype=np.float32), dtype=tf.float32)--> 381     tf.keras.backend.set_value(model.variable1, test)    382     383 
查看完整描述

2 回答

?
FFIVE

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

當(dāng)我首先初始化模型并將其作為額外參數(shù)添加到回調(diào)方法時(shí),它會(huì)起作用。所以解決辦法如下:


class LossCallback(tf.keras.callbacks.Callback):

    def __init__(self, model):

        super(LossCallback, self).__init__()

        model.beta_x = tf.Variable(1.0, trainable=False, name='weight1', dtype=tf.float32)


    def on_epoch_begin(self, epoch, logs=None):

        tf.keras.backend.set_value(self.model.beta_x, tf.constant(0.5) * epoch)


    def on_epoch_end(self, epoch, logs=None):

        logs = logs or {}

        logs['beta_x'] = tf.keras.backend.get_value(self.model.beta_x)


model = create_model() # initialize custom keras model

callback = LossCallback(model)


model.fit(..., callbacks=[callback])


查看完整回答
反對(duì) 回復(fù) 2023-06-27
?
幕布斯6054654

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊

避免直接編輯變量。您必須像這樣訪問 keras 變量


import tensorflow as tf

from tensorflow import keras

import numpy as np


def warm_up(epoch, logs):

    val = keras.backend.get_value(model.optimizer.lr)

    val *= 1.1

    tf.keras.backend.set_value(model.optimizer.lr, val)

    


callback = tf.keras.callbacks.LambdaCallback(on_epoch_begin=warm_up)


model = tf.keras.models.Sequential([

    keras.layers.Dense(10, 'relu'),

    keras.layers.Dense(1, 'sigmoid')

])


model.compile(loss='binary_crossentropy')


X_train = tf.random.uniform((10,10))

y_train = tf.ones((10,))

model.fit(X_train, y_train, 

          callbacks = [callback])

請(qǐng)注意我如何獲取當(dāng)前值,例如val = keras.backend.get_value(model.optimizer.lr)。這是在運(yùn)行時(shí)獲取正確值的正確方法。另外,不要在循環(huán)內(nèi)使用或聲明新變量。您可能可以new_value通過閱讀和更改舊的內(nèi)容來獲得新的內(nèi)容。另外,請(qǐng)避免在回調(diào)內(nèi)部使用除 Tensorflow 之外的任何其他庫(kù),尤其是當(dāng)您的回調(diào)經(jīng)常被調(diào)用時(shí)。不要使用numpy,使用tensorflow。實(shí)際上總有一種張量流操作可以滿足您的需要。


編輯:如果您有一些自定義值要更新,您可以使用如下模式:


class LossCallback(tf.keras.callbacks.Callback):

    def __init__(self):

        super(LossCallback, self).__init__()

        self.someValue = tf.Variable(1.0, trainable=False, name='weight1', dtype=tf.float32)


    def on_epoch_end(self, epoch, logs=None):

        tf.keras.backend.set_value(self.model.loss.someValue, self.someValue * epoch)

或者您仍然可以嘗試使用 lambda 回調(diào)。

從回調(diào)中,您可以訪問模型的任何變量。像這樣self.model.someVariable。您還可以訪問模型自定義__init__函數(shù)中定義的任何自定義變量,如下所示:


#in model's custom __init__

def __init__(self, someArgs):

    ...

    self.someArg = someArgs

    ...


#in callback's "on_epoch_..." method

    ...

    keras.backend.set_value(self.model.someArg, 42)

    ...


請(qǐng)注意,您不能self.model在回調(diào)__init____init__函數(shù)中使用,因?yàn)檎{(diào)用回調(diào)時(shí)模型仍未初始化。


這有幫助嗎?


查看完整回答
反對(duì) 回復(fù) 2023-06-27
  • 2 回答
  • 0 關(guān)注
  • 248 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)