自上而下调制双层网络

时间:2017-04-23 21:34:28

标签: machine-learning tensorflow computer-vision

我有这个简单的双层前馈网络,它将对MNIST数字进行分类。通过这个网络,我获得了令人满意的准确性,但我想略微修改它。根据{{​​3}}的论文,我希望在没有横向模块的情况下加入自上而下的调制(参见第3页)。此外,我想将它限制在这两个层,因此不要创建更深的网络。基本上,在新网络中,与下面的简单前馈网络相反,第二层再次连接到第一层以实现这种自上而下的反馈链路。

我不知道如何去做,经过大量的在线挖掘后,我还没有在TensorFlow(或任何其他库)中找到任何其他源代码/示例。非常感谢任何帮助或推动正确的方向!

# PREVENTS VANISHING GRADIENT PROBLEM
stddev1=np.sqrt(2 / float(784))
# second = 10 units
stddev2=np.sqrt(2 / float(10))

w1 = tf.get_variable('w1',[784,10],
                     initializer=tf.random_normal_initializer(mean=0, stddev=stddev1))
b1 = tf.get_variable('b1',[10,],
                     initializer=tf.constant_initializer(0.0))
# relu has vanishing gradient problem
z1 = tf.matmul(x, w1) + b1
y1 = tf.nn.relu(z1) # 

# layer 2
w2 = tf.get_variable('w2',[10,10],
                 initializer= tf.random_normal_initializer(mean=0,stddev=stddev2))
b2 = tf.get_variable('b2',[10,],
                     initializer=tf.constant_initializer(0.0))
y = tf.nn.softmax(tf.matmul(y1, w2) + b2, name="output")

y_ = tf.placeholder(tf.float32, [None, 10])

cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

1 个答案:

答案 0 :(得分:1)

如果您想将第二层连接到第一层,它将是回归神经网络(RNN),而不是自上而下的调制,

你提到的论文实际上没有像你说的那样做,他们只在前面的层中使用他们以前的图层,实际上,他们喜欢跳过连接。

跳过连接(或跳过图层)是这样的:{{0}}

正如您在sip-layer之后所看到的,我们使用{{1}}函数将两个层聚合为一个,但实现自顶向下调制的文章使用“Lateral Modules”以便将先前的层直接连接到下一层