【问题标题】:Tensorflow warning: two cells provided to MultiRNNCell are the same objectTensorflow 警告:提供给 MultiRNNCell 的两个单元格是同一个对象
【发布时间】:2019-01-19 17:03:45
【问题描述】:

我在执行 tensorflow 脚本时一直收到以下警告

警告:tensorflow:提供给 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 似乎运行良好,并且正在做出准确的预测。

与警告消息相关的含义是什么?可以安全地忽略它吗?如果可能很严重,如何评估其影响?

【问题讨论】:

  • 可能 RNNCell 引用是相同的(它们是同一个对象)。可以放相关代码吗?

标签: tensorflow neural-network recurrent-neural-network


【解决方案1】:

您使用[lstm_layer] * num_layers 创建多个RNN 层,这些层实际上在python 中引用了同一个对象。这种用法在一些版本的tensorflow中是正常的,有的版本会报错。

正如警告所说,由于所有 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-10
    • 2023-03-23
    • 2016-12-24
    • 2022-01-10
    • 2016-10-17
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多