Python 对影响学习的权重和偏差依赖性感到困惑

Python 对影响学习的权重和偏差依赖性感到困惑,python,tensorflow,recurrent-neural-network,lstm,Python,Tensorflow,Recurrent Neural Network,Lstm,我有一个工作的LSTM模型,它有一个从循环状态到输出的权重/偏差层。然后我也编写了相同的系统,但有两层。这意味着我将有LSTM,然后是一个隐藏层,然后是输出。我写了几行来定义这个双层模型,但一次也没有使用它们。但是,现在这些层已经存在,但根本没有被使用,它不会学习!因此,我的权重和偏差定义如下: weights = {

我有一个工作的LSTM模型,它有一个从循环状态到输出的权重/偏差层。然后我也编写了相同的系统,但有两层。这意味着我将有LSTM,然后是一个隐藏层,然后是输出。我写了几行来定义这个双层模型,但一次也没有使用它们。但是,现在这些层已经存在,但根本没有被使用,它不会学习!因此,我的权重和偏差定义如下:

    weights = {                                                                                                                                                               
        # if going straight from PLSTM output to x,y prediction                                                                                                               
        'out': tf.Variable(tf.random_normal([FLAGS.n_hidden, n_out], stddev=1/FLAGS.n_hidden, dtype=tf.float32)),                                                             

        # if fully connected feed-forward hidden layer between PLSTM output and x,y prediction                                                                                
        'outHidden1': tf.Variable(tf.random_normal([FLAGS.n_hidden, FLAGS.n_middle], dtype=tf.float32)),                                                                    
        'outHidden2': tf.Variable(tf.random_normal([FLAGS.n_middle, n_out], dtype=tf.float32))                                                                              
    }                                                                                                                                                                         

    biases = {                                                                                                                                                                
        # if going straight from PLSTM output to x,y prediction                                                                                                               
        'out': tf.Variable(tf.random_normal([n_out], dtype=tf.float32)),                                                                                                      

        # if fully connected feed-forward hidden layer between PLSTM output and x,y predictio                                                                                 
        'outHidden1': tf.Variable(tf.random_normal([FLAGS.n_middle], dtype=tf.float32)),                                                                                    
        'outHidden2': tf.Variable(tf.random_normal([n_out], dtype=tf.float32))                                                                                              
    }
所以我定义了双层权重和偏差,但在训练或测试中从未使用过

我将权重/偏差合并为一行:

    return tf.matmul(relevant, weights['out']) + biases['out']
相关的是LSTM输出。所以我只在权重和偏差字典中使用“out”变量

它什么也学不到。然后,我对双层变量进行了如下注释:

    weights = {                                                                                                                                                               
        # if going straight from PLSTM output to x,y prediction                                                                                                               
        'out': tf.Variable(tf.random_normal([FLAGS.n_hidden, n_out], stddev=1/FLAGS.n_hidden, dtype=tf.float32)),                                                             

        # if fully connected feed-forward hidden layer between PLSTM output and x,y prediction                                                                                
        # 'outHidden1': tf.Variable(tf.random_normal([FLAGS.n_hidden, FLAGS.n_middle], dtype=tf.float32)),                                                                    
        # 'outHidden2': tf.Variable(tf.random_normal([FLAGS.n_middle, n_out], dtype=tf.float32))                                                                              
    }                                                                                                                                                                         

    biases = {                                                                                                                                                                
        # if going straight from PLSTM output to x,y prediction                                                                                                               
        'out': tf.Variable(tf.random_normal([n_out], dtype=tf.float32)),                                                                                                      

        # if fully connected feed-forward hidden layer between PLSTM output and x,y predictio                                                                                 
        # 'outHidden1': tf.Variable(tf.random_normal([FLAGS.n_middle], dtype=tf.float32)),                                                                                    
        # 'outHidden2': tf.Variable(tf.random_normal([n_out], dtype=tf.float32))                                                                                              
    }

…它又开始工作了。这些变量的存在如何阻碍学习?我初始化了它们,但不应该在它们之间运行渐变,backprop不应该与那些未使用的变量有任何关联。还是我误解了什么?

您是否尝试过在注释了这些变量的情况下多次运行程序?您的系统在某些初始化过程中可能会不稳定。我运行了几次,因为我不相信这就是问题所在。它一直都在发生。你试过在张力板上可视化系统吗?您是否也可以添加用于优化器/培训的代码?此外,无需重复您注释的代码。此外,这可能很愚蠢,但请尝试为您注释的每个变量指定一个
名称
。不幸的是,我不太熟悉TensorBoard。不过,给他们起不同的名字就行了。现在的问题是为什么。。。如果它们都在同一个字典中声明,可能会出现一些依赖项?您是否尝试过在注释这些变量的情况下多次运行程序?您的系统在某些初始化过程中可能会不稳定。我运行了几次,因为我不相信这就是问题所在。它一直都在发生。你试过在张力板上可视化系统吗?您是否也可以添加用于优化器/培训的代码?此外,无需重复您注释的代码。此外,这可能很愚蠢,但请尝试为您注释的每个变量指定一个
名称
。不幸的是,我不太熟悉TensorBoard。不过,给他们起不同的名字就行了。现在的问题是为什么。。。如果它们都在同一个字典中声明,可能会出现一些依赖项?