3

https://github.com/torch/nn/blob/master/generic/Tanh.cを参照してください。

例えば、

 static int nn_(Tanh_updateOutput)(lua_State *L)
{
   THTensor *input = luaT_checkudata(L, 2, torch_Tensor);
   THTensor *output = luaT_getfieldcheckudata(L, 1, "output", torch_Tensor);

   THTensor_(resizeAs)(output, input);

   if (input->nDimension == 1 || !THTensor_(isContiguous)(input) || !THTensor_(isContiguous)(output))
   {
    TH_TENSOR_APPLY2(real, output, real, input,   \
     *output_data = tanh(*input_data););
    }
  else
  {
   real* ptr_output = THTensor_(data)(output);
   real* ptr_input  = THTensor_(data)(input);
   long i;
 #pragma omp parallel for private(i)
for(i = 0; i < THTensor_(nElement)(input); i++)
  ptr_output[i] = tanh(ptr_input[i]);
}
return 1;
}

まず、最初の行を解釈する方法がわかりません。

 static int nn_(Tanh_updateOutput)(lua_State *L)

ここでの議論は何ですか?Tanh_updateOutput は何を参照していますか? 「nn_」には特別な意味がありますか?

次に、「TH_TENSOR_APPLY2」と「THTensor_(...)」の両方が使用されていますが、それらがどこで定義されているかわかりません。このファイルに他のインクルードはありませんか?

4

1 に答える 1

7

nn_マクロです。"#define nn_"リポジトリで;を検索すると、定義を見つけることができます。それはあるinit.c

#define nn_(NAME) TH_CONCAT_3(nn_, Real, NAME)

nn_(Tanh_updateOutput)マクロ定義のチェーンをたどり続けることができ、おそらく関数の名前に展開するトークンの貼り付けに終わるでしょう。

generic/Tanh.cインクルードがないのは奇妙generic/Tanh.cです。他のファイルにインクルードする必要があります。これは.cファイルでは珍しいことです。)

于 2015-07-21T04:29:19.847 に答える