Как применить dropConnect на повторяющихся весах в кератах - PullRequest
0 голосов
/ 27 января 2020

Я использую Keras и хочу применить dropConnect к весам от скрытого к скрытому в LSTM. Я обнаружил, что Keras позволяет применять исключения только для скрытых состояний, используя (recurrent_dropout).

Я пытаюсь сделать это на заказ. Я пытаюсь создать пользовательский recurrent_regularizer, используя следующее:

def dropConnect_reg(weight_matrix):
    return tf.nn.dropout(weight_matrix, rate = 0.5)

, затем используйте его следующим образом (задача состоит в моделировании языка, поэтому я применяю слой softmax к вокабу):

model.add(LSTM(650, return_sequences=True, recurrent_regularizer=dropConnect_reg))
model.add(Dense(vocab_size, activation='softmax'))

Однако я не думаю, что это работает должным образом. Без использования реализованного recurrent_regularizer потеря представляет собой скалярное число, как и ожидалось (категориальная потеря перекрестной энтропии) Однако при использовании он выводит полный массив для потери, вместо того, чтобы иметь только одно число (размеры: time_steps, time_steps * 4). Я также в настоящее время не уверен, применяется ли это во время обучения только, как это предназначено.

Есть идеи, как правильно это реализовать?

1 Ответ

0 голосов
/ 29 января 2020

Если вы хотите только последний вывод из LSTM, вам нужно установить return_sequences=False. Если вы хотите применить выбывание только во время тренировки, вам понадобится что-то вроде этого:

def dropconnect_regularizer(weight_matrix):
  return tf.nn.dropout(weight_matrix, rate=0.5)

if training:
  regularizer = dropconnect_regularizer
else:
  regularizer = None

model.add(LSTM(650, recurrent_regularizer=regularizer))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...