Tensorflow中的重量分享

时间:2017-08-01 12:52:49

标签: python tensorflow neural-network

我尝试实施以下架构:Symmetric neural net layer

我传递了连接的输入

[x y] 

进入神经网络,第一层需要以图像中建议的方式对称,层中有N_HIDDEN神经元。我从以下设置开始:

input = tf.placeholder('float', [None, 2*NUM_FEATURES])
weights = tf.Variable(tf.random_uniform(shape=[2*NUM_FEATURES, N_HIDDEN], minval=-0.0001, maxval=0.0001, dtype=tf.float32))

hidden = tf.matmul(input,weights)

但是,上述代码与图像建议的方式不对称。如果我的权重只有一半,那么我必须分别将输入x和y相乘。

weights = tf.Variable(tf.random_uniform(shape=[NUM_FEATURES, N_HIDDEN], minval=-0.0001, maxval=0.0001, dtype=tf.float32))

tensorflow分享x_k和y_k神经元的方式是什么?

1 个答案:

答案 0 :(得分:1)

我不确定是否存在对Tensorflow如何实现像您这样的神经网络的误解。 神经元没有明确的定义,因为它在你的图像中被描绘出来。 h_ih_i'表示为操作 在您的情况下,您可以将每个h视为x1 * v_x1 + x2 * v_x2 + ...y1 * v_y1 + y2 * v_y2 + ...b的总和。

在代码中,它可以实现为:

input_x = tf.placeholder('float', [None, NUM_FEATURES])
input_y = tf.placeholder('float', [None, NUM_FEATURES])

weights_x = tf.Variable(tf.random_uniform(shape=[NUM_FEATURES, N_HIDDEN], dtype=tf.float32)) # v_x
weights_y = tf.Variable(tf.random_uniform(shape=[NUM_FEATURES, N_HIDDEN], dtype=tf.float32)) # v_y
bias      = tf.Variable(tf.random_uniform(shape=[N_HIDDEN], dtype=tf.float32))

hidden_x = tf.matmul(input_x, weights_x)
hidden_y = tf.matmul(input_y, weights_y)

h = tf.add(hidden_x, hidden_y)
h = tf.add(h, bias)

batch_size = 5
x = np.random.normal(size = [batch_size, NUM_FEATURES])
y = np.random.normal(size = [batch_size, NUM_FEATURES])

session = tf.InteractiveSession()
session.run(tf.global_variables_initializer())

session.run(h, feed_dict = {input_x : x, input_y : y})


每当您运行h节点时,它等于计算图像中的所有h_i
因此,不需要连接数据以使其对称。
对不同类型的输入使用两个单独的占位符将使您更容易理解网络的工作方式。并且权重也可以分开。在您的图片中,它们的标注也不同:v_xv_y

我希望它有所帮助!