如何使用 TensorFlow 2.16 替换模型层?

问题描述 投票:0回答:1

以下适用于 TensorFlow 2.15:

from tensorflow.keras.layers import Input, Dense, BatchNormalization
from tensorflow.keras.models import Model

inputs = Input(shape=(4,))
x = Dense(5, activation='relu')(inputs)
predictions = Dense(3, activation='softmax')(x)
model = Model(inputs=inputs, outputs=predictions)
model.compile(loss='categorical_crossentropy', optimizer='nadam')

print(model.layers)
model._self_tracked_trackables[1] = BatchNormalization()
print(model.layers)

输出:

[<keras.src.engine.input_layer.InputLayer object at 0x7f9324ba10c0>, <keras.src.layers.core.dense.Dense object at 0x7f931c1144c0>, <keras.src.layers.core.dense.Dense object at 0x7f931c116c80>]
[<keras.src.engine.input_layer.InputLayer object at 0x7f9324ba10c0>, <keras.src.layers.normalization.batch_normalization.BatchNormalization object at 0x7f9324ba3280>, <keras.src.layers.core.dense.Dense object at 0x7f931c116c80>]

如何使用 TensorFlow 2.16 实现这一目标?

模型不再有

_self_tracked_trackables

AttributeError: 'Functional' object has no attribute '_self_tracked_trackables'

并尝试像这样交换图层:

model.layers[1] = BatchNormalization()

左右

model._layers[1] = BatchNormalization()

左右

model.operations[1] = BatchNormalization()

不改变

model.layers
的内容。

print(model.layers)

不仅在此分配之前输出以下内容,还在分配之后输出以下内容:

[<InputLayer name=input_layer, built=True>, <Dense name=dense, built=True>, <Dense name=dense_1, built=True>]

(背景:我正在尝试将我的frugally-deep库更新到新的TF版本,并且它依靠交换层将嵌套顺序模型转换为功能模型。)

tensorflow keras
1个回答
0
投票
model._operations[1] = BatchNormalization()

有效。

© www.soinside.com 2019 - 2024. All rights reserved.