python - 如何在张量流中实现 Theano.tensor.Lop?
问题描述
最近想在tensorflow中重写一些Theano编码。但是,我遇到了不知道如何在tensorflow中编写Lop算子的问题。下图是关于 Theano.tensor.Lop 的 API。
以下是 Theano 中的初始编码。
def svgd_gradient(X0):
hidden, _, mse = discrim(X0)
grad = -1.0 * T.grad( mse.sum(), X0)
kxy, neighbors, h = rbf_kernel(hidden) #TODO
coff = T.exp( - T.sum((hidden[neighbors] - hidden)**2, axis=1) / h**2 / 2.0 )
v = coff.dimshuffle(0, 'x') * (-hidden[neighbors] + hidden) / h**2
X1 = X0[neighbors]
hidden1, _, _ = discrim(X1)
dxkxy = T.Lop(hidden1, X1, v)
svgd_grad = grad + dxkxy / 2.
return grad, svgd_grad, dxkxy
这种方式我试过了,但是维度有问题。
def svgd_gradient(self, x0):
hidden, _, mse = self.discriminator(x0)
grad = -tf.gradients(tf.reduce_sum(mse), x0)
kxy,neighbors, h = self.rbd_kernel(hidden)
coff = tf.exp(-tf.reduce_sum((hidden[neighbors] - hidden)**2, axis=1) / h**2 / 2.0)
v = tf.expand_dims(coff, axis=1) * (-hidden[neighbors] + hidden) / h**2
x1 = x0[neighbors]
hidden1, _, _ = self.discriminator(x1, reuse=True)
dxkxy = self.Lop(hidden1, x1, v)
svgd_grad = grad + dxkxy / 2
return grad, svgd_grad, dxkxy
def Lop(self, f, wrt, v):
Lop = tf.multiply(tf.gradients(f, wrt), v)
return Lop
解决方案
你可以试试
def Lop(output, wrt, eval_points):
grads = tf.gradients(output, wrt, grad_ys=eval_points)
return grads
(信用:贾特福德)
推荐阅读
- ios - 导致 UITextView 最后换行的额外空格被忽略
- angular - ngrx 影响属性有效负载在类型上不存在 never
- postgresql - 尝试更新 Postgres 表中的 JSON 但出现未知错误
- c# - ASP.NET 中的 WindowsIdentity.Impersonate 随机“用于模拟的令牌无效 - 它不能被复制”
- laravel-5.8 - 如何修复 laravel 错误 5.8 哎呀!有一个错误。在脸书上分享时?
- javascript - Javascript树时间线
- python - XPATH 选择器无法选择 html 代码块
- node.js - 为什么 crontab 不执行我的节点脚本?
- python - 铸造复数值丢弃快速傅立叶算法的虚部
- r - 为 R 包生成可打印文档的标准选项是什么?