作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
例如,y=Ax
其中 A
是一个对角矩阵,其可训练权重 (w1, w2, w3
) 在对角线上。
A = [w1 ... ...
... w2 ...
... ... w3]
如何在 Tensorflow 或 Keras 中创建这样的可训练 A
?
如果我尝试 A = tf.Variable(np.eye(3))
,可训练权重的总数将为 3*3=9,而不是 3。因为我只 想要更新 (w1,w2,w3) 这 3 个权重。
一个技巧可能是使用 A = tf.Variable([1, 1, 1]) * np.eye(3)
,以便将 3 个可训练权重映射到A
。
我的问题是:
这个技巧对我有用吗?梯度会被正确计算吗?
如果A
的情况比较复杂怎么办?例如。如果我想创建:
其中 w1, w2, ..., w6
是要更新的权重。
最佳答案
您有两种不同的工具来解决这个问题。
这两种方法并不排斥,您可以混合使用#1 和#2 类型的连续步骤。
例如,对于您的第一个示例(对角矩阵),我们可以使用方法 #1。
w = tf.Variable(tf.zeros(n))
A = tf.diag(w) # creates a diagonal matrix with elements of w
对于您的第二个更复杂的示例,我们可以使用方法 #2。
A = tf.Variable(tf.zeros((n, n)))
A = tf.matrix_band_part(A, 1, 1) # keep only the central band of width 3
A = tf.matrix_set_diag(A, tf.ones(n)) # set diagonal to 1
关于python - tensorflow ,凯拉斯 : How to create a trainable variable that only update in specific positions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51745580/
我是一名优秀的程序员,十分优秀!