TensorFlow卷积代码优化

时间:2017-06-08 02:51:37

标签: tensorflow convolution

我使用的是TensorFLow的C ++版本,并为Android安装了TensorFlow'成功使用以下命令 ' bazel build -c opt // tensorflow / examples / android:tensorflow_demo' 如https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android#bazel

中所述

我正在尝试优化卷积代码。以下是面临的问题

  1. 无法找到卷积代码的确切位置。 我可以调试代码直到
  2. 中的函数

    '返回选择( 条件(), kernel.reshape(kernel_dims) .contract(输入 .extract_image_patches( kernelRows,kernelCols,row_stride,col_stride, row_in_stride,col_in_stride,padding_type) .reshape(pre_contract_dims), contract_dims) .reshape(post_contract_dims), 输入 .extract_image_patches(kernelRows,kernelCols,row_stride,col_stride, row_in_stride,col_in_stride,padding_type) .reshape(pre_contract_dims) .contract(kernel.reshape(kernel_dims),contract_dims) .reshape(post_contract_dims));'

    出现在https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/eigen_spatial_convolutions.h

    我对上述功能的问题很少。

    1.1上述功能是否真的在进行卷积?如果是的话代码在哪里?

    1.2收缩(契约函数)是否与卷积相同?如果卷积和收缩都相同,为什么对输入和内核矩阵都执行合同操作?

    1.3函数的定义在哪里 - 选择,重塑,合同,提取图像补丁等?

    2.无法从输入和内核矩阵中提取数据(矩阵)。这是参考上面链接中的同一页面

    2.1我找到了一行代码&#k;(内核);'在上面的第946行。我可以知道上述功能的位置定义吗?

    2.2我无法从相应的4d张量(输入和内核)中提取输入和内核矩阵作为浮点数组,因为我想尝试使用并行处理优化卷积码。我无法找到任何方法将Tensor矩阵从Tensor 4D转换为数组。

    请帮助我回答上述问题

2 个答案:

答案 0 :(得分:1)

1.1)是的,代码是Cond()语句之后的代码:

Value

1.2)不,收缩是矩阵乘法到N维张量的抽象。视情况而定,仅适用于其中之一

1.3)这些都是Eigen函数,Eigen的Tensor操作文档不太有用。我在其Wiki上发现this,可以帮助您了解其功能,虽然不彻底,但可以帮助您将想法付诸实践。

2.1)我也不知道它在哪里。

2.2)我不确定是否可以直接完成此操作,Eigen的函数可能不太直观,如果您知道4D张量的形状,则可以创建一个矩阵,然后将每个元素分配给该矩阵(我认为效率不是很高)

我刚刚意识到这是一年前发布的,但是我已经写了我的答案,它可能对其他人有用,所以我就把它留在这里。

答案 1 :(得分:0)

从Linux的缓存中选择特征TensorFlow文件。我的路径是/.cache/bazel/_bazel_ashok/c54b442ed4139c7d8ad47f330eb538d6/external/eigen_archive