在Tensorflow中将常量矩阵引入乘法时遇到问题

时间:2017-01-23 19:57:45

标签: tensorflow neural-network

我正在尝试实现完全连接的图层。我有一个矩阵,它指定变量connectivity_matrix中我想要的连接性,它是一个零和0的numpy数组。

我目前试图通过这种连接矩阵F成对乘以权重的方式:

enter image description here

这是在tensorflow中执行此操作的正确方法吗?这是我到目前为止所拥有的

import numpy as np
import tensorflow as tf
import tflearn

num_input = 10
num_layer1 = 313
num_output = 700

# For example:
connectivity_matrix = np.array(np.random.choice([0, 1], size=(num_layer1, num_output)), dtype='float32')

input = tflearn.input_data(shape=[None, num_input])

# Here is where I specify the connectivity in tensorflow
connectivity = tf.constant(connectivity_matrix, shape=[num_layer1, num_output])

# One basic, fully connected layer
layer1 = tflearn.fully_connected(input, num_layer1, activation='relu')

# Here is where I want to have a non-fully connected layer
W = tf.Variable(tf.random_uniform([num_layer1, num_output]))
b = tf.Variable(tf.zeros([num_output]))
# so take a fully connected W, and do a pairwise multiplication with my tf_connectivity matrix
W_filtered = tf.mul(connectivity, W)
output = tf.matmul(layer1, W_filtered) + b

1 个答案:

答案 0 :(得分:0)

在每次迭代中屏蔽掉不需要的连接应该有效,但我不确定收敛属性是什么样的。学习率可能足够小吗?

另一种方法是惩罚成本函数中不需要的权重。您将使用一个掩码矩阵,其中1表示不需要的连接,0表示所需的连接(或者具有更平滑的过渡)。这将乘以权重,平方/缩放并添加到成本函数中。这应该更顺利地收敛。

P.S。:如果你在这方面取得了进展,那么听到你的评论会很好,因为我也在研究这个问题。