2017-08-04 40 views
1

我試圖找到一個實際的Conv2D操作的實現,所以我可以評估內存訪問模式。跟蹤事物,看起來Conv2D操作的執行通過contract()函數調用進入Eigen。問題是,我似乎無法在TensorFlow或Eigen源中找到函數的定義或聲明。TensorFlow Conv2D實現?

什麼函數主要負責在TensorFlow中執行Conv2D操作?我想看看它是如何癱瘓的,一般的內存訪問模式是什麼,以及原始計算是如何完成的。

該查詢專門用於CPU,因爲我已經在一定程度上研究了GPU的執行情況。

回答

1

經過一番搜索,我發現CPU Conv2D的實際執行是在deep_conv2d.cc

+0

你知道在這個文件中實現的Deep和Direct卷積之間有什麼區別嗎? –

0

我認爲Conv2dCPU使用本徵conv ops Line 61 onwards

+0

不是真的,這是爲操作設置的(爲簡化情況調用一些優化方法)。注意'functor :: SpatialConvolution (),(ctx-> eigen_device (),input-> tensor (),input.tensor (),filter.tensor (),row_stride,col_stride,padding)在最後的'else'中。這開始了一個函數調用的蜿蜒路徑,我似乎無法追蹤到某種看起來實際上正在進行乘法/ for循環的結構等。 –

+0

您可能會看看https://github.com/tensorflow/tensorflow /blob/master/tensorflow/core/kernels/conv_ops.cc#L277 –

0

contract()返回一個抽象的表達,其評價TensorContraction.h實現在這個文件中實現。它本質上是Eigen矩陣或矩陣矢量產品的封裝。