我如何裁剪张量的一部分?

时间:2019-09-21 15:21:24

标签: python tensorflow keras

我想裁剪张量的某些部分并将这些部分分配为零。为此目的,我使用了以下代码,但是会产生以下错误。如何解决这个问题?我正在使用Keras,并且有CNN网络。 x是卷积层和张量的输出。 谢谢。

def diff_cropout(x, rate=0.6):
    global block_size
    cover_img =x[0]
    Iw = x[1]
    diff = Iw - cover_img
    diff_shape = diff.get_shape().as_list()
    h, w = diff_shape[1:3]

    blacked_pixels = int(rate * (h*w))
    height = int(np.floor(np.sqrt(blacked_pixels)))
    width = int(np.ceil(np.sqrt(blacked_pixels)))

    x = np.random.randint(0, w - width)
    y = np.random.randint(0, h - height)

    new_diff = diff
    new_diff = new_diff[y:y+height, x:x+width].assign(tf.zeros([height, width]))
    new_Iw = cover_img + new_diff

    return new_I

在我的网络中:

diff_cropout_attacked = layers.Lambda(diff_cropout, arguments={'rate':diff_cropRate}, name='diff_cropout_attack')([image, actimg])

错误:

  

回溯(最近通话最近一次):

     

文件“”,第1行,在       runfile('E:/ New folder / testattack.py',   wdir ='E:/ New folder')

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ spyder_kernels \ customize \ spydercustomize.py”,   运行文件中的第704行       execfile(文件名,命名空间)

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ spyder_kernels \ customize \ spydercustomize.py”,   execfile中的第108行       exec(compile(f.read(),文件名,'exec'),命名空间)

     

文件“ E:/Newfolder/testattack.py”,第319行,在       diff_cropout_attacked =层数。Lambda(diff_cropout,arguments = {'rate':diff_cropRate},   name ='residual_cropout_attack')([image,actimg])

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ engine \ base_layer.py”,   第457行,致电       输出= self.call(输入,** kwargs)

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ keras \ layers \ core.py”,   687行,正在通话中       返回self.function(inputs,** arguments)

     

文件“ E:/Newfolder/testattack.py”,第199行,位于diff_cropout中       new_diff = new_diff [y:y + height,x:x + width] .assign(tf.zeros([height,width]))

     

文件   “ D:\ software \ Anaconda3 \ envs \ py36 \ lib \ site-packages \ tensorflow \ python \ ops \ array_ops.py”,   指定行700       引发ValueError(“仅变量支持切片分配”)

     

ValueError:仅变量支持切片分配

0 个答案:

没有答案