我有以下代码片段,用Lua和torch编写,这是一种自定义的边缘检测算法:
xGrad1[{{},{},{},{1,width-1}}] = input:narrow(4,2,width-1) - input:narrow(4,1,width-1)
yGrad1[{{},{},{1,height-1},{}}] = input:narrow(3,2,height-1) - input:narrow(3,1,height-1)
xGrad2[{{},{},{},{2,width}}] = input:narrow(4,2,width-1) - input:narrow(4,1,width-1)
yGrad2[{{},{},{2,height},{}}] = input:narrow(3,2,height-1) - input:narrow(3,1,height-1)
local xGrad = (torch.abs(self.xGrad1) + torch.abs(self.xGrad2))/2
local yGrad = (torch.abs(self.yGrad1) + torch.abs(self.yGrad2))/2
output = torch.sum(xGrad,2)+torch.sum(yGrad,2)
如您所见,xGrad和yGrad张量的最后两个维度(表示图像的宽度和高度)仅部分更新,例如在xGrad2中,只有列2到width-1。在
现在我想用Tensorflow和Python实现相同的结果。我不确定我的一般方法是否正确,但我已经将所有4个梯度张量初始化为一个变量,并预先用零填充它们。现在我正在为这些部分分配而挣扎。我用Variable.assign
试过了,但没有运气。在
目前,这是我的代码:
^{pr2}$在将列表索引从Lua转换为python之后,当我直接输出作为4个assign命令的参数的计算时,得到了不错的结果,但是在输出xGrad1的内容时只得到了一个黑色的图像等等。在
我假设不兼容的形状有问题,但我已经将validate_shapes切换为False,因为在会话创建时我不知道输入的形状,因为输入图像是在会话启动后加载的。如果有人对此也有想法,请随时回答我,但现在我只问如何仅部分分配一个变量张量。在
如果你想做一个切片作业,你必须遵循这样的方法
下面是对Tensorflow中切片赋值的一个很好的解释, https://stackoverflow.com/a/43139565/6531137
希望这有帮助。在
相关问题 更多 >
编程相关推荐