保存张量流模型时是否保存了可训练参数?

Is the trainable parameter saved when saving a tensorflow model?

我有一个模型,其中一些第一层已冻结,而其他层未冻结。然后我使用 model.save(path) 保存这个模型。当我使用 load_model(path) 加载它时,正确的图层是否仍会被冻结?

文档中不清楚,但我最好的猜测是图层被冻结了。您可以通过加载保存的模型来测试它,然后尝试:

for layer.model.layers:
    print(layer.name, layer.trainable)

保存模型时 保存 可训练参数。 示例:

from keras.models import load_model
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

model = keras.Sequential(
    [
        keras.Input(shape=(28, 28, 1)),
        layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Flatten(),
        layers.Dropout(0.5),
        layers.Dense(10, activation="softmax"),
    ]
)

model.layers[-1].trainable = False
model.compile(
    optimizer='adam',
    loss="binary_crossentropy",
)

model.save('test1')
model.save('test2.h5')

test1 = load_model('test1')
test2 = load_model('test2.h5')

for layer in model.layers:
  if layer.trainable:
    print('Not frozen')
  else:
    print('Frozen')

for layer in test1.layers:
  if layer.trainable:
    print('Not frozen')
  else:
    print('Frozen')

for layer in test2.layers:
  if layer.trainable:
    print('Not frozen')
  else:
    print('Frozen')

输出:

Not frozen
Not frozen
Not frozen
Not frozen
Frozen
Not frozen
Not frozen
Not frozen
Not frozen
Frozen
Not frozen
Not frozen
Not frozen
Not frozen
Frozen