Python Tensorflow v1.14中内核约束的使用
我正在实现一个自定义的密集层,其权重为12×12,其中并非一层的所有神经元都连接到另一层。我定义了一个投影矩阵,如下所示: 投影矩阵=np.零((12,12)) 连接=[[2,6,9],[4,7,10],[0,6,9],[5,8,11],[1,7,10],[3,8,11],[0,2,9],[1,4,10], [3, 5, 11], [0, 2, 6], [1, 4, 7], [3, 5, 8]] 对于i,zip中的连接(范围(投影矩阵形状[0]),连接): 对于有关的j: 投影矩阵[i,j]=1 然后用这个投影矩阵乘以权重矩阵:Python Tensorflow v1.14中内核约束的使用,python,python-3.x,tensorflow,machine-learning,deep-learning,Python,Python 3.x,Tensorflow,Machine Learning,Deep Learning,我正在实现一个自定义的密集层,其权重为12×12,其中并非一层的所有神经元都连接到另一层。我定义了一个投影矩阵,如下所示: 投影矩阵=np.零((12,12)) 连接=[[2,6,9],[4,7,10],[0,6,9],[5,8,11],[1,7,10],[3,8,11],[0,2,9],[1,4,10], [3, 5, 11], [0, 2, 6], [1, 4, 7], [3, 5, 8]] 对于i,zip中的连接(范围(投影矩阵形状[0]),连接): 对于有关的j: 投影矩阵[i,j]=1
new_weight_matrix=np.multiply(weight_matrix,projection_matrix)#也可以是tf.multiply
我正在浏览来自的tf.layers.dense的文档。有一个名为kernel\u constraint
的参数,其描述如下:
由优化器更新后应用于偏差的可选投影函数
我的问题是,将projection\u matrix
传递给这个参数(kernel\u constraint
)是否实现了我想要实现的目标(仅连接由projection\u matrix
定义的特定神经元)?您的问题的答案是:否
在优化器执行更新后,此参数将投影应用于内核(或偏差)。例如,当您希望您的变量属于给定的子域时,可以使用它。在这种情况下,在优化器执行更新后,变量将在可行子域内重新投影
例如,如果您希望您的内核位于[0,1]
内部,您可以构建内核约束,如下所示:
def custom_kernel_constraint(var):
return tf.math.maximum(tf.math.minimum(var, 1.), 0.)
我不知道您的用例,但是如果您只需要调用densed
来执行此断开连接,那么您可以执行kernel\u约束,如:
def disconnection_kernel_constraint(var):
return tf.multiply(var, projection_matrix)
但是,还必须记住使用常量初始值设定项将随机内核与投影矩阵相乘来初始化内核,否则第一次计算不会中断(因为投影仅在优化器更新后应用)
例如,作为参数
kernel_initializer= tf.constant_initializer(tf.multiply(tf.random_normal(shape=[12,12),projetion_matrix))
我认为这比在代码中显式地使用tf.multiply
要模糊一些,但这取决于您的需要。谢谢您的回答,我有两点意见:第一,tf.math.max
函数的第二个参数不应该是0.0
而不是-1.
?第二,实现我想要的任何目标的唯一方法是以matrix hadamard product的形式手动执行?我正在更新答案,以实现kerlnel_约束的目标。是的,打字错误:)我会试试看,然后回来,谢谢你的时间