Как выключить / включить слой LSTM? - PullRequest
0 голосов
/ 21 января 2019

Я ищу способ доступа к слою LSTM, чтобы сложение и вычитание слоя осуществлялось по событиям.Таким образом, слой может быть добавлен или вычтен, когда есть триггер функции.Например (гипотетически): добавьте слой LSTM, если a = 2, и удалите слой LSTM, если a = 3.

Здесь a = 2 и a = 3 должны быть функцией python, которая возвращает определенное значение на основена котором слой LSTM должен быть добавлен или удален.Я хочу добавить функцию переключения к слою, чтобы ее можно было включать или выключать на основе функции python.

Возможно ли это?

В настоящее время мне нужно жестко закодировать слойнеобходимо.Например:

# Initialising the RNN 
regressor = Sequential()

# Adding the first LSTM layer and some Dropout regularization 
regressor.add(LSTM(units = 60, return_sequences = True, input_shape = 
(X_train.shape[1], X_train.shape[2])))
#regressor.add(Dropout(0.1))

# Adding the 2nd LSTM layer and some Dropout regularization 
regressor.add(LSTM(units = 60, return_sequences = True))
regressor.add(Dropout(0.1))

Моя цель - добавить и вычесть эти слои во время выполнения.Любая помощь приветствуется !!

1 Ответ

0 голосов
/ 25 февраля 2019

Я нашел ответ и пост на тот случай, если кто-то еще ищет решение. Это можно сделать, используя функцию замораживания слоя Keras. По сути, вам нужно передать логический обучаемый аргумент в конструктор слоя, чтобы установить его как необучаемый.

Например:

 frozen_layer = Dense(32, trainable=False)

Кроме того, если вы хотите установить свойство trainable слоя на True или False после создания экземпляра. Вызовом compile () вашей модели после изменения обучаемого свойства. Например:

    x = Input(shape=(32,))
    layer = Dense(32)
    layer.trainable = False
    y = layer(x)

    frozen_model = Model(x, y)
    # the weights of layer will not be updated during training for below model
    frozen_model.compile(optimizer='rmsprop', loss='mse')

    layer.trainable = True
    trainable_model = Model(x, y)
    # the weights of the layer will be updated during training 
    # (which will also affect the above model since it uses the same layer instance)
    trainable_model.compile(optimizer='rmsprop', loss='mse')

    frozen_model.fit(data, labels)  # this does NOT update the weights of layer
    trainable_model.fit(data, labels)  # this updates the weights of layer

Надеюсь, это поможет !!

...