保存张量流模型时是否保存了可训练参数?
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
我有一个模型,其中一些第一层已冻结,而其他层未冻结。然后我使用 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