私はテンソルを初期化していて、ポインタを使って直接データにアクセスしたいと思います。テンソルデータをテンソルフローでアクセスするときのセグメンテーションエラー(C++で)
input_ptr[0]
それは、セグメンテーションフォールトが発生するが、私は理由を理解していない:私はデータにアクセスしようとすると、私は使用して、たとえば、
float *input_ptr = input.flat<float>().data();
を使用しています。 C++ APIによる
:
)(フラット
戻りデータ・タイプと所定形状の固有::テンソルとしてテンソルデータ。
これらのメソッドを使用すると、選択した寸法とサイズのデータにアクセスできます。あなたはそれらを呼び出すためにテンソルの次元の数を知る必要はありません。しかし、彼らは要求された型が一致し、寸法がtensor.`これは固有テンソル私を取得します
と同じ数の要素に固有::テンソルを作成することを確認してください。さて、固有のドキュメントによると:
データ()
テンソル用のストレージへのポインタを返します。テンソルがconstの場合、ポインタはconstです。これにより、データに直接アクセスできます。データのレイアウトは、テンソルレイアウト(RowMajorまたはColMajor)に依存します。
例:
Eigen::Tensor<float, 2> a(3, 4);
float* a_data = a.data();
>a_data[0] = 123.45f;
>cout << "a(0, 0): " << a(0, 0);
>=> a(0, 0): 123.45
だから、私の知る限り、私は問題なくinput_ptr
を使用することができるはずです。
(実際にポインタが有効な場所を指し示していることに注意してください)例えば、cudaMemcpy
を使用して、その内容をデバイスアレイに正常にコピーすることができます。私はちょうど理由を把握することはできません。)
任意のアイデアをいただければ幸いです。
使用前にポインタを確認することをお勧めします。 – Zakir
十分に公正で、私はここでそれをやめました。 (ただし、前述のように、この特定のケースでは、ポインタがヌルではないことがわかります) – Dealan