Как решить проблему, что Trainable-False не работает в Keras? - PullRequest
0 голосов
/ 12 апреля 2019

Я столкнулся с ошибкой "trainable = false".

Когда я разработал код со структурой,

модель имеет две подразделяемые модели (модель FC, модель CN), которые соединены последовательно.

После тренировки только модели FC, я хочу заморозить FC и тренировать FC + CN, всю модель.

Однако заморозка с обучаемым не работает, и выходит что-то странное.

Когда не замерзнуть:

model.FCnetwork.trainable = True
model.FCnetwork.summary()
Total params: 2,584,576
Trainable params: 2,578,432
Non-trainable params: 6,144

и при замораживании:

model.FCnetwork.trainable = False
model.FCnetwork.summary()
Total params: 5,163,008
Trainable params: 2,578,432
Non-trainable params: 2,584,576

Общее количество параметров увеличено. И, конечно, заморозка не работает.

Это мой разработанный класс

class MYMAP():
    def __init__(self):
        # Input shape


        optimizer = optimizers.Adam()

        self.CNnetwork= self.Convolutional_network()
        self.CNnetwork.compile()




        self.FCnetwork = self.Fullyconnected_network()
        self.FCnetwork.compile(loss='mse',
            optimizer=optimizer)

        z = Input(shape=(input_size,))
        img = self.FCnetwork(z)

        valid = self.CNnetwork(img)

        self.combined = Model(z, valid)

        optimizer_DG = optimizers.Adam()
        self.combined.compile(loss='mse', optimizer=optimizer_DG)

    def Fullyconnected_network(self):

        noise = Input(shape=(input_size,))
        img = model(noise)

        return Model(noise, img)




    def Convolutional_network(self):

        img = Input(shape=(image_size_vectored,))
        validity = model(img)

        return Model(img, validity)

Мне было довольно сложно найти способ решить.

Большое спасибо.

1 Ответ

0 голосов
/ 12 апреля 2019

Как ясно сказано в предупреждении

Вы установили model.trainable без вызова model.compile

Правильный пример кода:

class MYMAP():
    def __init__(self):        
        self.optimizer = optimizers.Adam()
        self.FCnetwork = self.Fullyconnected_network()

        self.FCnetwork.compile(loss='mse',
            optimizer=self.optimizer)

        z = Input(shape=(32,))
        img = self.FCnetwork(z)


    def Fullyconnected_network(self):            
        noise = Input(shape=(32,))        
        img = Dense(8)(noise)
        return Model(noise, img)

model = MYMAP()
model.FCnetwork.trainable = True
model.FCnetwork.compile(loss='mse', optimizer=optimizers.Adam())
model.FCnetwork.summary()
model.FCnetwork.trainable = False
model.FCnetwork.compile(loss='mse', optimizer=optimizers.Adam())
model.FCnetwork.summary()
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_39 (InputLayer)        (None, 32)                0         
_________________________________________________________________
dense_15 (Dense)             (None, 8)                 264       
=================================================================
Total params: 264
Trainable params: 264
Non-trainable params: 0
_________________________________________________________________
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_39 (InputLayer)        (None, 32)                0         
_________________________________________________________________
dense_15 (Dense)             (None, 8)                 264       
=================================================================
Total params: 264
Trainable params: 0

Обязательно запустите model.compile после изменения обучаемого параметра модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...