我的神经网络程序是否完全连接?

人工智能 神经网络 机器学习 人工智能设计 长短期记忆
2021-11-18 08:14:09

我的神经网络有以下程序:

n_steps = 9
n_inputs = 36
n_neurons = 50
n_outputs = 1
n_layers = 2
learning_rate = 0.0001
batch_size =100
n_epochs = 1000#200 
train_set_size = 1000
test_set_size = 1000
tf.reset_default_graph()
X = tf.placeholder(tf.float32, [None, n_steps, n_inputs],name="input")
y = tf.placeholder(tf.float32, [None, n_outputs],name="output")
layers = [tf.contrib.rnn.LSTMCell(num_units=n_neurons,activation=tf.nn.relu6, use_peepholes = True,name="layer"+str(layer))
         for layer in range(n_layers)]    layers.append(tf.contrib.rnn.LSTMCell(num_units=n_neurons,activation=tf.nn.relu6, use_peepholes = True,name="layer"+str(layer)))
multi_layer_cell = tf.contrib.rnn.MultiRNNCell(layers)
rnn_outputs, states = tf.nn.dynamic_rnn(multi_layer_cell, X, dtype=tf.float32)
stacked_rnn_outputs = tf.reshape(rnn_outputs, [-1, n_neurons]) 
stacked_outputs = tf.layers.dense(stacked_rnn_outputs, n_outputs)
outputs = tf.reshape(stacked_outputs, [-1, n_steps, n_outputs])
outputs = outputs[:,n_steps-1,:]

我想知道我的网络是否完全连接?
当我尝试查看变量时,我看到:

multi_layer_cell.weights

输出是:

[<tf.Variable 'rnn/multi_rnn_cell/cell_0/layer0/kernel:0' shape=(86, 200) dtype=float32_ref>,
 <tf.Variable 'rnn/multi_rnn_cell/cell_0/layer0/bias:0' shape=(200,) dtype=float32_ref>,
 <tf.Variable 'rnn/multi_rnn_cell/cell_0/layer0/w_f_diag:0' shape=(50,) dtype=float32_ref>,
 <tf.Variable 'rnn/multi_rnn_cell/cell_0/layer0/w_i_diag:0' shape=(50,) dtype=float32_ref>,
 <tf.Variable 'rnn/multi_rnn_cell/cell_0/layer0/w_o_diag:0' shape=(50,) dtype=float32_ref>,
 <tf.Variable 'rnn/multi_rnn_cell/cell_1/layer1/kernel:0' shape=(100, 200) dtype=float32_ref>,
 <tf.Variable 'rnn/multi_rnn_cell/cell_1/layer1/bias:0' shape=(200,) dtype=float32_ref>,
 <tf.Variable 'rnn/multi_rnn_cell/cell_1/layer1/w_f_diag:0' shape=(50,) dtype=float32_ref>,
 <tf.Variable 'rnn/multi_rnn_cell/cell_1/layer1/w_i_diag:0' shape=(50,) dtype=float32_ref>,
 <tf.Variable 'rnn/multi_rnn_cell/cell_1/layer1/w_o_diag:0' shape=(50,) dtype=float32_ref>]

我不明白每一层是否都得到了完整的输入。
我想知道下图对于上面的代码是否正确:
在此处输入图像描述

如果不是这样,那么网络的数字是多少?请告诉我。

1个回答
  1. 是数字=代码吗?

    不。您的图显示了一个完全连接的前馈网络(MLP)。但是在您的代码中,您使用的是带有 peepholes 的两层LSTM对于 LSTM 的可视化,通常对每一层使用块。

    这是带有窥视孔的 LSTM 图,它是 tensorflow 实现的基础(来源:论文,图 1)。

在此处输入图像描述

  1. 为什么选择 86 码?

    输入与隐藏状态连接: n_inputs + n_neurons = 36 + 50 = 86

  2. 为什么第二层的尺寸为 100?

    第二个 LSTM 层通过第一层 ( n_neurons) 获得大小为 50 的输入,该输入与第二层 (大小 ) 的隐藏状态连接n_neurons = 50因此你得到50 + 50 = 100.

  3. 为什么是 200 号?

    有四个大小的权重矩阵86×50(图:彩色圆圈和 g 圆圈),它们似乎组合成一个矩阵(450) 大小86×200( layer0/kernel)。

  4. 为什么是 50 号?

    三个变量w_f_diag用于窥视孔连接(图:虚线),它们的大小w_i_diagw_o_diagn_neurons = 50