Neural network Tensorflow中的独立图像块提取

Neural network Tensorflow中的独立图像块提取,neural-network,tensorflow,convolution,Neural Network,Tensorflow,Convolution,在中,将tf.nn.conv2d-操作描述为: 将过滤器展平为二维矩阵,形状[过滤器高度*过滤器宽度*输入通道,输出通道] 从输入张量中提取图像面片,以形成形状的虚拟张量[批处理、输出高度、输出宽度、过滤器高度*过滤器宽度*输入通道] 对于每个面片,将滤波器矩阵和图像面片向量相乘 是否有只应用步骤2的操作?我在API文档中找不到类似的内容。我可能使用了错误的关键字进行搜索。我想这样做的诀窍是: 使用output\u channels=filter\u height*filter\u width*

在中,将
tf.nn.conv2d
-操作描述为:

  • 将过滤器展平为二维矩阵,形状
    [过滤器高度*过滤器宽度*输入通道,输出通道]
  • 从输入张量中提取图像面片,以形成形状的虚拟张量
    [批处理、输出高度、输出宽度、过滤器高度*过滤器宽度*输入通道]
  • 对于每个面片,将滤波器矩阵和图像面片向量相乘

  • 是否有只应用步骤2的操作?我在API文档中找不到类似的内容。我可能使用了错误的关键字进行搜索。

    我想这样做的诀窍是:

  • 使用
    output\u channels=filter\u height*filter\u width*in\u channels
  • 将此过滤器的值固定为当过滤器展平为二维矩阵时(参见步骤2),它是单位矩阵。查看下面的示例代码,了解使用
    np.eye().reforme()执行此操作的简单方法。
  • 执行一个正常的
    tf.nn.conv2d(输入、筛选、步幅=[1,1,1,1],padding='SAME')
  • 您现在有一个shape
    [批处理、输出高度、输出宽度、过滤器高度*过滤器宽度*输入通道]


    下面是一个简单的代码,用于大小为3*3的输入图像,带有一个通道(和批量大小为1)

    将tensorflow导入为tf
    将numpy作为np导入
    输入值=np.arange(1,10)。重塑(1,3,3,1))
    输入=tf常数(输入值)
    输入=tf.cast(输入,tf.float32)
    过滤器_值=np.眼睛(9).重塑((3,3,1,9))
    filter=tf.常数(filter\u值)
    过滤器=tf.cast(过滤器,tf.float32)
    output=tf.nn.conv2d(输入、过滤、步幅=[1,1,1,1],padding='SAME')
    
    我想这样做的诀窍是:

  • 使用
    output\u channels=filter\u height*filter\u width*in\u channels
  • 将此过滤器的值固定为当过滤器展平为二维矩阵时(参见步骤2),它是单位矩阵。查看下面的示例代码,了解使用
    np.eye().reforme()执行此操作的简单方法。
  • 执行一个正常的
    tf.nn.conv2d(输入、筛选、步幅=[1,1,1,1],padding='SAME')
  • 您现在有一个shape
    [批处理、输出高度、输出宽度、过滤器高度*过滤器宽度*输入通道]


    下面是一个简单的代码,用于大小为3*3的输入图像,带有一个通道(和批量大小为1)

    将tensorflow导入为tf
    将numpy作为np导入
    输入值=np.arange(1,10)。重塑(1,3,3,1))
    输入=tf常数(输入值)
    输入=tf.cast(输入,tf.float32)
    过滤器_值=np.眼睛(9).重塑((3,3,1,9))
    filter=tf.常数(filter\u值)
    过滤器=tf.cast(过滤器,tf.float32)
    output=tf.nn.conv2d(输入、过滤、步幅=[1,1,1,1],padding='SAME')
    
    这现在添加到tensorflow api中:

    这现在添加到tensorflow api中:

    谢谢,我将尝试一下这种方法。很遗憾,我们不得不做“不必要的工作”,但它可能比我目前只使用CPU的自定义操作快。谢谢,我将尝试这种方法。很遗憾,我们不得不做“不必要的工作”,但它可能比我目前只使用CPU的自定义操作快。谢谢。然而,我发现,不幸的是,这个操作的梯度还没有定义。谢谢。然而,我发现,不幸的是,这个操作的梯度还没有定义。