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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將正則化器從 tf.keras.applications 添加到模型時無法保存模型

將正則化器從 tf.keras.applications 添加到模型時無法保存模型

嗶嗶one 2024-01-04 17:00:56
我使用 python 3.7 和 Tensorflow 2.2.0。我想從頭開始訓練 MobileNet-V2,因此我采用已經構建的模型并向所有所需層添加正則化器。該模型編譯得很好,我能夠擬合它。但是,在保存模型時,遇到以下錯誤:  File "/mnt/disk1/anaconda3/envs/py37/lib/python3.7/site-packages/tensorflow/python/saved_model/nested_structure_coder.py", line 82, in _map_structure    "No encoder for object [%s] of type [%s]." % (str(pyobj), type(pyobj)))tensorflow.python.saved_model.nested_structure_coder.NotEncodableError: No encoder for object [<tensorflow.python.keras.layers.convolutional.Conv2D object at 0x7fd2f00469d0>] of type [<class 'tensorflow.python.keras.layers.convolutional.Conv2D'>].如果不添加正則化(下面代碼中的 config.regularizer.name = ""),模型可以成功擬合并保存。我想知道這是一個錯誤還是我在這里做錯了什么?import tensorflow as tffrom tensorflow.keras.applications import MobileNetV2model = MobileNetV2(input_shape=ds_info["shape"], classes=ds_info["n_classes"], weights=None, include_top=True)if config.regularizer.name == "l2":    l2_reg = config.regularizer.weight    for layer in model.layers:        if isinstance(layer, tf.keras.layers.DepthwiseConv2D):            layer.add_loss(lambda la=layer: tf.keras.regularizers.l2(l2_reg)(la.depthwise_kernel))        elif isinstance(layer, tf.keras.layers.Conv2D) or isinstance(layer, tf.keras.layers.Dense):            layer.add_loss(lambda la=layer: tf.keras.regularizers.l2(l2_reg)(la.kernel))
查看完整描述

1 回答

?
瀟湘沐

TA貢獻1816條經驗 獲得超6個贊

根據(jù)文檔,事實證明,lambda 函數(shù)不應該帶有任何參數(shù)。然而,當我沒有傳遞參數(shù)時,它導致了另一個非常奇怪的錯誤(這是關于Dense沒有 的層depthwise_kernel,這是顯而易見的,不應該發(fā)生,但不知何故它發(fā)生了)。

因此,我的最終解決方案是定義兩個單獨的正則化函數(shù),如上面鏈接中的建議。

def add_l2_regularization_kernel(layer, weight):

? ? def _add_l2_regularization_kernel():

? ? ? ? l2 = tf.keras.regularizers.l2(weight)

? ? ? ? return l2(layer.kernel)

? ? return _add_l2_regularization_kernel



def add_l2_regularization_depthwise_kernel(layer, weight):

? ? def _add_l2_regularization_depthwise_kernel():

? ? ? ? l2 = tf.keras.regularizers.l2(weight)

? ? ? ? return l2(layer.depthwise_kernel)

? ? return _add_l2_regularization_depthwise_kernel



if config.has("regularizer"):

? ? if config.regularizer.name == "l2":

? ? ? ? l2_reg = config.regularizer.weight

? ? ? ? for layer in model.layers:

? ? ? ? ? ? if isinstance(layer, tf.keras.layers.DepthwiseConv2D):

? ? ? ? ? ? ? ? layer.add_loss(add_l2_regularization_depthwise_kernel(layer, l2_reg))

? ? ? ? ? ? elif isinstance(layer, tf.keras.layers.Conv2D) or isinstance(layer, tf.keras.layers.Dense):

? ? ? ? ? ? ? ? layer.add_loss(add_l2_regularization_kernel(layer, l2_reg))


查看完整回答
反對 回復 2024-01-04
  • 1 回答
  • 0 關注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號