softmax之前的Tensorflow NaN

时间:2017-07-12 01:27:39

标签: python machine-learning tensorflow deep-learning lstm

我使用Tensorflow训练基于神经的强化学习代理。这个想法如下,首先我训练一个LSTM(关于真实数据,从人类偏见开始)来预测人类未来的行为可能是什么。然后我使用LSTM的细胞状态作为强化学习的状态。

但是,我注意到内部状态随时间变化的趋势,因此,内部状态不直接适用于强化学习。这显然是用归一化层LSTM解决的常见问题。我尝试了NL LSTM的tensorflow实现,但现在,我无法训练它,因为TF将NaN权重放在其输出上。

我使用ADAM优化并尝试了不同的权重,没有任何变化,我也尝试增加LSTM中的单位数而没有任何改进。

有没有人在我的代码中看到问题?

with tf.variable_scope("system_lstm") as scope:
    no_units_system=128
    _seq_system = tf.placeholder(tf.float32, [batch_size, max_length_system, system_inputShapeLen], name='seq_')
    _seq_length_system = tf.placeholder(tf.int32, [batch_size], name='seq_length_')

    cell_system = tf.contrib.rnn.LayerNormBasicLSTMCell(
            no_units_system)

    output_system, hidden_states_system = tf.nn.dynamic_rnn(
        cell_system,
        _seq_system,
        sequence_length=_seq_length_system,
        dtype=tf.float32
    )

    out2_system = tf.reshape(output_system, shape=[-1, no_units_system])
    out2_system =  tf.layers.dense(out2_system, system_outputShapeLen)

    out_final_system = tf.reshape(out2_system, shape=[-1, max_length_system, system_outputShapeLen])
    y_system_ = tf.placeholder(tf.float32, [None, max_length_system, system_outputShapeLen])

    softmax_system = tf.nn.softmax(out_final_system, dim=-1)  
    loss_system = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=out_final_system, labels=y_system_))
    optimizer = tf.train.AdamOptimizer(learning_rate=1e-10)
    minimize_system = optimizer.minimize(loss_system)

0 个答案:

没有答案