Tensorflow 如何裁剪依赖于模型输入的keras图像张量?

Tensorflow 如何裁剪依赖于模型输入的keras图像张量?,tensorflow,keras,conv-neural-network,slice,tensor,Tensorflow,Keras,Conv Neural Network,Slice,Tensor,我想创建一个keras网络,该网络获取一个遮罩图像(一个矩形区域由零填充的图像)作为一个输入,并获取关于该区域位置的信息作为第二个输入: 输入1:蒙版_图像,形状=(128,128,3) 输入2:mask_pos,shape=(2,)或(4,)取决于区域大小是固定的还是可变的 我想让我的网络填充“归零”区域,然后提取模型输出的重构区域 我今天遇到的主要问题是: 切片张量 关于我是否需要考虑批量,或者keras是否为我处理这些的困惑 如何使用切片/裁剪过程中第二个输入的值 下面是我当前尝试的代

我想创建一个keras网络,该网络获取一个遮罩图像(一个矩形区域由零填充的图像)作为一个输入,并获取关于该区域位置的信息作为第二个输入:

  • 输入1:蒙版_图像,形状=(128,128,3)

  • 输入2:mask_pos,shape=(2,)或(4,)取决于区域大小是固定的还是可变的

我想让我的网络填充“归零”区域,然后提取模型输出的重构区域

我今天遇到的主要问题是:

  • 切片张量
  • 关于我是否需要考虑批量,或者keras是否为我处理这些的困惑
  • 如何使用切片/裁剪过程中第二个输入的值
  • 下面是我当前尝试的代码片段。最后一行基本上显示了我现在所处的困境:我需要填写值BOX_XBOX_Y批大小,以便它们在网络训练时动态适应输入。 我真的非常感谢您的帮助,我一直在努力解决这个问题:

    我进一步尝试了一下,但得到了一条恼人的错误消息:/

     def extract_mask_region(img, box_x, box_y):
            return K.slice(img, (0, box_x, box_y, 0), (32, 32, 32, 3))
    
     fill_in = Lambda(lambda args: extract_mask_region(args[0], args[1], args[2]))([filled_img, mask_pos[1], mask_pos[0]])
    
    错误消息: _ValueError:尝试将“begin”转换为张量,但失败。错误:形状 等级必须相等,但为1和0
    将形状2与其他形状合并。对于输入形状为[]、[2]、[2]、[2]、[2]、[3]的“lambda_28/Slice/packed”(op:“Pack”)。

    老实说,我对tensorflow有点失望,因为我们仍然无法做到这一点。我一直在一个接一个地查看线程,但我没有找到一种可以使用矢量化操作的方法。我甚至不能将张量转换回numpy数组,因为tensorflow说它是纯符号的。老实说,我对tensorflow有点失望,我们仍然不能这样做。我一直在一个接一个地查看线程,但我没有找到一种可以使用矢量化操作的方法。我甚至不能将张量转换回numpy数组,因为tensorflow说它是纯符号的。
     def extract_mask_region(img, box_x, box_y):
            return K.slice(img, (0, box_x, box_y, 0), (32, 32, 32, 3))
    
     fill_in = Lambda(lambda args: extract_mask_region(args[0], args[1], args[2]))([filled_img, mask_pos[1], mask_pos[0]])