Cheloved
@Cheloved
Good man

Как достать и заморозить предварительно обученную сверточную основу?

Есть обученная сеть:
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation="relu", input_shape=(150, 150, 3)))

model.add(layers.MaxPooling2D(2, 2))
model.add(layers.Conv2D(64, (3, 3), activation="relu"))
# model.add(layers.MaxPooling2D(2, 2))
# model.add(layers.Conv2D(128, (3, 3), activation="relu"))
model.add(layers.MaxPooling2D(2, 2))
model.add(layers.Conv2D(128, (3, 3), activation="relu"))
model.add(layers.MaxPooling2D(2, 2))
model.add(layers.Flatten())
model.add(layers.Dropout(0.5))
model.add(layers.Dense(512, activation="relu"))
model.add(layers.Dense(1, activation="sigmoid"))

Как достать и заморозить сверточную основу как в примере ниже:
conv_base = VGG16(weights="imagenet",
                  include_top=False,
                  input_shape=(150, 150, 3))

model = models.Sequential()
model.add(conv_base)
model.add(layers.Flatten())
model.add(layers.Dense(256, activation="relu"))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(1, activation="sigmoid"))
conv_base.trainable = False


(Так замораживал)
for layer in model.layers:
    if layer.name == "flatten_1" or layer.name == "dense_1" or layer.name == "dropout_1" or layer.name == "dense_2":
        set_trainable = True
    else:
        layer.trainable = False
  • Вопрос задан
  • 129 просмотров
Решения вопроса 1
adugin
@adugin Куратор тега Python
Заморозка через layer.trainable - верно. Что значит "достать" свёрточную основу?
Вот веса слоя:
layer.weights
layer.get_weights()


И чем перечислять имена слоёв, проще сделать что-то вроде:
for layer in model.layers[:4]:
    layer.trainable = False
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы