Я использую 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). Я также в настоящее время не уверен, применяется ли это во время обучения только, как это предназначено.
Есть идеи, как правильно это реализовать?