Предупреждение Tensorflow: две ячейки, предоставленные MultiRNNCell, являются одним и тем же объектом - PullRequest
0 голосов
/ 19 января 2019

Я постоянно получаю следующее предупреждение при выполнении сценариев tenorflow

ВНИМАНИЕ: тензор потока: по крайней мере две ячейки, предоставленные MultiRNNCell, являются тот же объект и поделится весами.

lstm_layer=rnn.LSTMBlockCell(num_units,forget_bias=1)
lstm_layer=rnn.DropoutWrapper(lstm_layer, output_keep_prob=output_keep_prob)
stacked_lstm = rnn.MultiRNNCell([lstm_layer] * num_layers)
outputs,_=rnn.static_rnn(stacked_lstm,input,dtype="float32")

Однако рассматриваемые RNN, кажется, работают нормально и делают точные прогнозы.

Какое значение имеет отношение к предупреждающему сообщению? Можно ли это безопасно игнорировать? Если оно потенциально серьезное, как можно оценить его влияние?

1 Ответ

0 голосов
/ 20 января 2019

Вы используете [lstm_layer] * num_layers для создания нескольких слоев RNN, которые фактически ссылаются на один и тот же объект в python.Это использование является нормальным в некоторых версиях tenorflow, а некоторые версии сообщают об ошибках.

Как говорится в предупреждении, поскольку все слои RNN являются одним и тем же объектом, их весовые коэффициенты будут оставаться одинаковыми.Все ошибки возвращаются на уровень RNN.Это эквивалентно уменьшению параметров модели и снижению сложности модели.

Если вы хотите создать несколько разных слоев RNN и сложных моделей, вы можете использовать следующее использование.Оценка эффективности этих двух различных методов зависит от конкретных сценариев применения и результатов.Если результаты вашей модели достаточно хороши, более сложные модели не имеют особого смысла.

rnn_layers = []
for _ in range(num_layers):
    lstm_layer = rnn.LSTMBlockCell(num_units, forget_bias=1)
    lstm_layer = rnn.DropoutWrapper(lstm_layer, output_keep_prob=output_keep_prob)
    rnn_layers.append(lstm_layer)

stacked_lstm = rnn.MultiRNNCell(rnn_layers)
...