Machine learning 自顶向下调制两层网络

Machine learning 自顶向下调制两层网络,machine-learning,tensorflow,computer-vision,Machine Learning,Tensorflow,Computer Vision,我有一个简单的两层前馈网络,它将对MNIST数字进行分类。有了这个网络,我得到了令人满意的精度,但我想稍微修改一下。根据作者的一篇论文,我想在不使用横向模块的情况下合并它们的自顶向下调制,见第3页。另外,我想把它限制在这两层,这样就不会创建更深层次的网络。基本上,在新网络中,与下面的简单前馈网络相反,第二层再次连接到第一层以实现这种自上而下的反馈链路 我不知道该怎么做,经过大量的在线挖掘,我还没有在TensorFlow或任何其他库中找到关于如何实现这一点的任何其他源代码/示例。我们非常感谢您在正

我有一个简单的两层前馈网络,它将对MNIST数字进行分类。有了这个网络,我得到了令人满意的精度,但我想稍微修改一下。根据作者的一篇论文,我想在不使用横向模块的情况下合并它们的自顶向下调制,见第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)

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

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

跳过连接或跳过层是这样的:


正如您在sip层之后看到的,我们使用add函数将两层聚合为一层,但实现自上而下调制的纸张使用“横向模块”,以便将前一层直接连接到下一层。

好的,这是有意义的。这可能是为了以后的阶段。我想完成的是,z2被添加到x输入图像中,z1由x和z2之和计算得出。我应该为此使用RNN单元/LSTM单元吗?那么这是单层的,对吗?:如果你想这样做:layer1=x+z1,layer2=x+layer1,所以不需要RNN,你共享的链接使用多个层。