欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > tensorflow2 自定義損失函數使用的隱藏坑

tensorflow2 自定義損失函數使用的隱藏坑

熱門標簽:宿州電話機器人哪家好 西青語音電銷機器人哪家好 成都呼叫中心外呼系統哪家強 旅游廁所地圖標注怎么弄 南昌地圖標注 電梯新時達系統外呼顯示e 地圖標注與注銷 無錫智能外呼系統好用嗎 百應電話機器人總部

Keras的核心原則是逐步揭示復雜性,可以在保持相應的高級便利性的同時,對操作細節進行更多控制。當我們要自定義fit中的訓練算法時,可以重寫模型中的train_step方法,然后調用fit來訓練模型。

這里以tensorflow2官網中的例子來說明:

import numpy as np
import tensorflow as tf
from tensorflow import keras
x = np.random.random((1000, 32))
y = np.random.random((1000, 1))
class CustomModel(keras.Model):
    tf.random.set_seed(100)
    def train_step(self, data):
        # Unpack the data. Its structure depends on your model and
        # on what you pass to `fit()`.
        x, y = data

        with tf.GradientTape() as tape:
            y_pred = self(x, training=True)  # Forward pass
            # Compute the loss value
            # (the loss function is configured in `compile()`)
            loss = self.compiled_loss(y, y_pred, regularization_losses=self.losses)

        # Compute gradients
        trainable_vars = self.trainable_variables
        gradients = tape.gradient(loss, trainable_vars)
        # Update weights
        self.optimizer.apply_gradients(zip(gradients, trainable_vars))
        # Update metrics (includes the metric that tracks the loss)
        self.compiled_metrics.update_state(y, y_pred)
        # Return a dict mapping metric names to current value
        return {m.name: m.result() for m in self.metrics}
    


# Construct and compile an instance of CustomModel
inputs = keras.Input(shape=(32,))
outputs = keras.layers.Dense(1)(inputs)
model = CustomModel(inputs, outputs)
model.compile(optimizer="adam", loss=tf.losses.MSE, metrics=["mae"])

# Just use `fit` as usual

model.fit(x, y, epochs=1, shuffle=False)
32/32 [==============================] - 0s 1ms/step - loss: 0.2783 - mae: 0.4257

 
tensorflow.python.keras.callbacks.History at 0x7ff7edf6dfd0>

這里的loss是tensorflow庫中實現了的損失函數,如果想自定義損失函數,然后將損失函數傳入model.compile中,能正常按我們預想的work嗎?

答案竟然是否定的,而且沒有錯誤提示,只是loss計算不會符合我們的預期。

def custom_mse(y_true, y_pred):
    return tf.reduce_mean((y_true - y_pred)**2, axis=-1)
a_true = tf.constant([1., 1.5, 1.2])
a_pred = tf.constant([1., 2, 1.5])
custom_mse(a_true, a_pred)
tf.Tensor: shape=(), dtype=float32, numpy=0.11333332>
tf.losses.MSE(a_true, a_pred)
tf.Tensor: shape=(), dtype=float32, numpy=0.11333332>

以上結果證實了我們自定義loss的正確性,下面我們直接將自定義的loss置入compile中的loss參數中,看看會發生什么。

my_model = CustomModel(inputs, outputs)
my_model.compile(optimizer="adam", loss=custom_mse, metrics=["mae"])
my_model.fit(x, y, epochs=1, shuffle=False)
32/32 [==============================] - 0s 820us/step - loss: 0.1628 - mae: 0.3257

tensorflow.python.keras.callbacks.History at 0x7ff7edeb7810>

我們看到,這里的loss與我們與標準的tf.losses.MSE明顯不同。這說明我們自定義的loss以這種方式直接傳遞進model.compile中,是完全錯誤的操作。

正確運用自定義loss的姿勢是什么呢?下面揭曉。

loss_tracker = keras.metrics.Mean(name="loss")
mae_metric = keras.metrics.MeanAbsoluteError(name="mae")

class MyCustomModel(keras.Model):
    tf.random.set_seed(100)
    def train_step(self, data):
        # Unpack the data. Its structure depends on your model and
        # on what you pass to `fit()`.
        x, y = data

        with tf.GradientTape() as tape:
            y_pred = self(x, training=True)  # Forward pass
            # Compute the loss value
            # (the loss function is configured in `compile()`)
            loss = custom_mse(y, y_pred)
            # loss += self.losses

        # Compute gradients
        trainable_vars = self.trainable_variables
        gradients = tape.gradient(loss, trainable_vars)
        # Update weights
        self.optimizer.apply_gradients(zip(gradients, trainable_vars))
        
        # Compute our own metrics
        loss_tracker.update_state(loss)
        mae_metric.update_state(y, y_pred)
        return {"loss": loss_tracker.result(), "mae": mae_metric.result()}
    
    @property
    def metrics(self):
        # We list our `Metric` objects here so that `reset_states()` can be
        # called automatically at the start of each epoch
        # or at the start of `evaluate()`.
        # If you don't implement this property, you have to call
        # `reset_states()` yourself at the time of your choosing.
        return [loss_tracker, mae_metric]
    
# Construct and compile an instance of CustomModel
inputs = keras.Input(shape=(32,))
outputs = keras.layers.Dense(1)(inputs)
my_model_beta = MyCustomModel(inputs, outputs)
my_model_beta.compile(optimizer="adam")

# Just use `fit` as usual

my_model_beta.fit(x, y, epochs=1, shuffle=False)
32/32 [==============================] - 0s 960us/step - loss: 0.2783 - mae: 0.4257

tensorflow.python.keras.callbacks.History at 0x7ff7eda3d810>

終于,通過跳過在 compile() 中傳遞損失函數,而在 train_step 中手動完成所有計算內容,我們獲得了與之前默認tf.losses.MSE完全一致的輸出,這才是我們想要的結果。

總結一下,當我們在模型中想用自定義的損失函數,不能直接傳入fit函數,而是需要在train_step中手動傳入,完成計算過程。

到此這篇關于tensorflow2 自定義損失函數使用的隱藏坑的文章就介紹到這了,更多相關tensorflow2 自定義損失函數內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 一小時學會TensorFlow2之基本操作1實例代碼
  • 詳解TensorFlow2實現前向傳播
  • 詳解TensorFlow2實現線性回歸
  • tensorflow2.0實現復雜神經網絡(多輸入多輸出nn,Resnet)
  • tensorflow2.0教程之Keras快速入門
  • 一小時學會TensorFlow2基本操作之合并分割與統計

標簽:辛集 西安 許昌 濰坊 渭南 贛州 七臺河 雅安

巨人網絡通訊聲明:本文標題《tensorflow2 自定義損失函數使用的隱藏坑》,本文關鍵詞  tensorflow2,自定義,損失,函數,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《tensorflow2 自定義損失函數使用的隱藏坑》相關的同類信息!
  • 本頁收集關于tensorflow2 自定義損失函數使用的隱藏坑的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    国产一区二区视频在线| 久久99久久久久| 丰满少妇久久久久久久| 老熟妻内射精品一区| 欧美一级日韩不卡播放免费| 亚洲视频免费观看| 国产精品一二三在| 丁香激情五月少妇| 欧美videofree性高清杂交| 香港成人在线视频| 久久久久99人妻一区二区三区| 日本精品一级二级| 国产精品女人毛片| 粉嫩av亚洲一区二区图片| 国产又粗又长免费视频| 国产亚洲一区二区三区在线观看 | 欧美一二三区在线观看| 亚洲一区二区三区四区的| 91麻豆免费视频| 欧美色图天堂网| 亚洲国产日韩综合久久精品| 在线中文字日产幕| 欧美理论片在线| 视频在线观看国产精品| 亚洲天堂成人av| 欧美电影免费观看高清完整版| 美国毛片一区二区| 少妇精品无码一区二区免费视频 | 日韩va亚洲va欧美va久久| 久久97超碰国产精品超碰| 亚洲永久无码7777kkk| 精品久久久久久久人人人人传媒| 免费亚洲电影在线| 性生活在线视频| 欧美老肥妇做.爰bbww视频| 五月婷婷欧美视频| 日韩一区二区a片免费观看| 久久亚洲免费视频| 懂色一区二区三区免费观看| 日本二三区不卡| 亚洲va国产天堂va久久en| 性欧美成人播放77777| 久久蜜桃av一区精品变态类天堂| 国产乱码精品一区二区三区忘忧草| 中文字幕av播放| 亚洲精品ww久久久久久p站| 一级黄色免费视频| 在线观看免费视频综合| 亚洲第一在线综合网站| 免费污网站在线观看| 中文字幕精品一区二区精品绿巨人| 99v久久综合狠狠综合久久| 欧美精品黑人性xxxx| 免费在线观看日韩欧美| 日韩在线不卡av| 亚洲免费av高清| 精品人妻一区二区三区日产乱码卜| 国产人伦精品一区二区| 91麻豆精东视频| 精品久久国产老人久久综合| 大尺度一区二区| 制服丝袜中文字幕一区| 国产米奇在线777精品观看| 91激情在线视频| 琪琪久久久久日韩精品| 日韩影院一区二区| 三级不卡在线观看| 卡通动漫亚洲综合| 日韩中文字幕91| 亚洲成人生活片| 日本欧洲一区二区| www.色小姐com| 日韩电影在线观看一区| 天天看片中文字幕| 久久狠狠亚洲综合| 色哟哟精品一区| 天天综合天天综合色| 中文乱码字幕高清一区二区| 亚洲动漫第一页| 日本福利片在线观看| 日本在线观看不卡视频| 色香蕉成人二区免费| 美女一区二区三区| 欧美吻胸吃奶大尺度电影| 国产伦理精品不卡| 欧美一区二区三区精品| 不卡电影一区二区三区| 欧美精品一区二区三区高清aⅴ| 欧美体内she精高潮| 久久五月婷婷丁香社区| 色哟哟视频在线| 亚洲欧美日韩在线不卡| 一级黄色性视频| 亚洲va国产天堂va久久en| 一本一本大道香蕉久在线精品| 久久99热这里只有精品| 欧美日韩中文字幕一区| 国产成人8x视频一区二区| 欧美一区二区三区免费观看视频| 91浏览器入口在线观看| 国产精品色一区二区三区| 亚洲av无码一区二区二三区| 亚洲综合视频网| 色久综合一二码| 国产成人精品免费网站| 26uuu另类欧美亚洲曰本| 国产大尺度视频| 亚洲精品国产一区二区三区四区在线 | 2023国产精品视频| 国产一级二级视频| 亚洲国产综合视频在线观看| 一本大道综合伊人精品热热| 国产成人欧美日韩在线电影| 久久综合九色综合欧美就去吻| 日韩 中文字幕| 亚洲无线码一区二区三区| 色狠狠桃花综合| 成人网页在线观看| 中文在线一区二区| 国产午夜精品福利视频| 免费人成网站在线观看欧美高清| 欧美日韩精品电影| 91视视频在线直接观看在线看网页在线看 | 精品人妻一区二区三区香蕉| 亚洲va欧美va天堂v国产综合| 欧美色视频一区| 欧美69精品久久久久久不卡| 亚洲视频每日更新| 色综合久久综合| 99精品视频一区二区三区| 中文字幕一区二区三区蜜月| 午夜精品福利在线视频| 成人禁用看黄a在线| 国产精品传媒视频| 国产一卡二卡三卡四卡| 亚洲国产精品久久久久秋霞影院 | 亚洲国产乱码最新视频| 欧美日韩在线三级| 91影视在线播放| 亚洲黄一区二区三区| 欧美调教femdomvk| 年下总裁被打光屁股sp| 午夜精品福利久久久| 欧美一级黄色片| 波多野结衣先锋影音| 日本成人在线视频网站| 欧美刺激脚交jootjob| 欧美大波大乳巨大乳| 日韩和欧美的一区| www欧美成人18+| 亚洲欧洲综合网| av电影一区二区| 亚洲国产成人av网| 日韩欧美国产1| 99自拍偷拍视频| 国产宾馆实践打屁股91| 国产精品天干天干在线综合| 一本久久a久久精品亚洲| 人妻精油按摩bd高清中文字幕| 天堂成人国产精品一区| 久久午夜免费电影| 曰本女人与公拘交酡| 中文字幕制服丝袜| 美女视频黄a大片欧美| 中文字幕不卡一区| 91成人看片片| 免费观看一区二区三区| 免费在线观看视频一区| 国产精品视频看| 777xxx欧美| 9.1片黄在线观看| 91视频观看视频| 蜜桃av噜噜一区二区三区小说| 国产欧美日韩亚州综合| 欧美性生交片4| 国产精品无码久久久久一区二区| 国产精品亚洲人在线观看| 亚洲黄色免费网站| 精品国产一区二区三区忘忧草| 精品国产欧美日韩不卡在线观看| 少妇愉情理伦片bd| 精品综合久久久久久8888| 国产精品久久久99| 91精品欧美综合在线观看最新| 免费人成又黄又爽又色| 成av人片一区二区| 午夜精品久久久久久不卡8050| 国产欧美一区二区精品性| 欧美日韩精品久久久| 国产三级黄色片| jjzz黄色片| 国产成a人亚洲精品| 丝袜国产日韩另类美女| 亚洲国产高清在线| 欧美精品第一页| 一本久道久久综合中文字幕| 亚洲性猛交xxxx乱大交| 成人精品免费网站| 久久成人精品无人区| 亚洲一区二区av在线|