Я никогда не пытался заморозить модель.
Я разработал модель, которая имеет два параллельных CNN с одинаковой структурой, которая принимает один и тот же вход. Затем у меня есть три выхода, два из которых являются вспомогательными для каждого CNN, а один - для классификатора предохранителей.
Я хочу тренировать модель альтернативным способом в каждую эпоху. Я читал, что мы можем заморозить модель, но я не знаю, как реализовать альтернативный слой свертки во время обучения. В некоторых постах я видел, что мы можем передавать функции в качестве аргумента обратного вызова. Но я не уверен, как это сделать. Кто-нибудь может мне помочь, предоставив пример?
моя модель
вход 1
input1= layers.Input(shape=(600,), dtype='int32', name='model1')
embeded_sequence1 = layers.Embedding(10000, 32) (input1)
conv_layer1 = layers.Conv1D(NO_OF_CONV_FILTERS,NO_OF_CONV_SIZE)(embeded_sequence1 )
activ_layer1 = layers.Activation('relu')(conv_layer1 )
global_max_pool1 = layers.GlobalMaxPooling1D()(activ_layer1 )
fc_layer_1 = layers.Dense(256)(global_max_pool1)
fc_relu_1 = layers.Activation('relu')(fc_layer_1)
dropout_layer_1 = layers.Dropout(0.5)(fc_relu_1)
aux1_output = layers.Dense(2,activation='softmax',name='aux1_output')(dropout_layer_1)
вход 2
embeded_sequence2 = layers.Embedding(10000, 32)(input1 )
conv_layer2 = layers.Conv1D(NO_OF_CONV_FILTERS,NO_OF_CONV_SIZE)(embeded_sequence2 )
activ_layer2 = layers.Activation('relu')(conv_layer2 )
global_max_pool2 = layers.GlobalMaxPooling1D()(activ_layer2 )
fc_layer_2 = layers.Dense(256)(global_max_pool2)
fc_relu_2 = layers.Activation('relu')(fc_layer_2)
dropout_layer_2 = layers.Dropout(0.5)(fc_relu_2)
aux2_output = layers.Dense(2,activation='softmax',name='aux2_output')(dropout_layer_2)
выполнить классификацию предохранителей
fuse = add(inputs=[global_max_pool1, global_max_pool2])
fc_layer_fuse = layers.Dense(256)(dot_product)
fc_relu_fuse = layers.Activation('relu')(fc_layer_fuse)
dropout_layer_fuse = layers.Dropout(0.5)(fc_relu_fuse)
fuse_output = layers.Dense(2,activation='softmax',name='fuse_output')(dropout_layer_fuse)
losses = { aux1_output':'categorical_crossentropy',
'aux2_output':'categorical_crossentrpy',
'fuse_output':'categorical_crossentropy'
}
lossWeights = {'aux1_output':0.3,'aux2_output':0.3,'fuse_output':1.0 }
model.compile(optimizer='adam', loss=losses,loss_weights=lossWeights, metrics=['accuracy'])
model.fit([X_train],[Y_trai,Y_train,Y_train],validation_data=[[X_test],[Y_test,Y_test,Y_test]], verbose=2, epochs = 100,shuffle = False )