如何从二维张量获取数据?

had*_*enj 6 javascript tensorflow.js

我想使用tensorflow.js从 2D 张量获取数据。我尝试使用data()这样的方法:

\n\n
const X = tf.tensor2d([[1, 2, 3, 4], [2, 2, 5, 3]]);\nX.data().then(X => console.log(X)};\n
Run Code Online (Sandbox Code Playgroud)\n\n

但结果是一个展平的一维数组:

\n\n
Float32Array(8)\xc2\xa0[1, 2, 3, 4, 2, 2, 5, 3]\n
Run Code Online (Sandbox Code Playgroud)\n\n

有没有办法保持数组的形状?

\n

dar*_*uby 0

为了提高速度,张量中的数据始终扁平化存储为一维数组类型。

\n\n

您给出的示例将不起作用,因为第二个参数tensor2dshape。要使其工作,您需要将其包装到另一个数组:

\n\n
const x = tf.tensor2d([[1, 2, 3, 4], [2, 2, 5, 3]]); //shape inferred as [2, 4]\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者你可以明确提供形状:

\n\n
const x = tf.tensor2d([1, 2, 3, 4, 2, 2, 5, 3], [2, 4]); // shape explicitly passed\n
Run Code Online (Sandbox Code Playgroud)\n\n

正如您所建议的,当您检查数据时,无论原始形状如何,您总是会得到一维数组

\n\n
await x.data() // Float32Array(8) [1, 2, 3, 4, 2, 2, 5, 3]\nx.shape //\xc2\xa0[2, 4]\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,如果您print()使用张量,则会考虑形状,它将显示为

\n\n
Tensor\n    [[1, 2, 3, 4],\n     [2, 2, 5, 3]]\n
Run Code Online (Sandbox Code Playgroud)\n