我希望能够使用tensorflow.js从2D张量中获取数据。我尝试使用以下代码来使用data()
方法:
const X = tf.tensor2d([[1, 2, 3, 4], [2, 2, 5, 3]]);
X.data().then(X => console.log(X)};
但结果是一个扁平的一维数组:
Float32Array(8) [1, 2, 3, 4, 2, 2, 5, 3]
有没有一种方法可以保持数组的形状?
我希望能够使用tensorflow.js从2D张量中获取数据。我尝试使用以下代码来使用data()
方法:
const X = tf.tensor2d([[1, 2, 3, 4], [2, 2, 5, 3]]);
X.data().then(X => console.log(X)};
Float32Array(8) [1, 2, 3, 4, 2, 2, 5, 3]
const X = tf.tensor2d([[1, 2, 3, 4], [2, 2, 5, 3]]);
console.log(X.arraySync())
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.2.7/dist/tf.min.js"></script>
在 Tensor 中,数据总是以类型为一维数组的方式存储,以提高速度。
你给出的例子不会起作用,因为 tensor2d
的第二个参数是 shape
。要使其起作用,你需要将其包装在另一个数组中:
const x = tf.tensor2d([[1, 2, 3, 4], [2, 2, 5, 3]]); //shape inferred as [2, 4]
或者你可以明确地提供形状:
const x = tf.tensor2d([1, 2, 3, 4, 2, 2, 5, 3], [2, 4]); // shape explicitly passed
就像你建议的一样,当你检查数据时,你总是会得到一个一维数组,无论原始形状如何。
await x.data() // Float32Array(8) [1, 2, 3, 4, 2, 2, 5, 3]
x.shape // [2, 4]
然而,如果您将张量打印出来print()
,形状会被考虑在内,并显示为:
Tensor
[[1, 2, 3, 4],
[2, 2, 5, 3]]
async function myTensorTable(myDiv, myOutTensor, myCols, myTitle){
document.getElementById(myDiv).innerHTML += myTitle + '<br>'
const myOutput = await myOutTensor.data()
myTemp = '<table border=3><tr>'
for (myCount = 0; myCount <= myOutTensor.size - 1; myCount++){
myTemp += '<td>'+ myOutput[myCount] + '</td>'
if (myCount % myCols == myCols-1){
myTemp += '</tr><tr>'
}
}
myTemp += '</tr></table>'
document.getElementById(myDiv).innerHTML += myTemp + '<br>'
}
使用示例在
tf.tensor2d([[1, 2, 3, 4], [2, 2, 5, 3]]);
。但是,由于x.data()
返回一个平坦的 Float32Array,我该如何获取张量中的一列呢? - hhh.shape
[x,y]
,然后只从你的数组中取y
个元素,如果你想要第二列,那么就是跳过 y,取 y
(不是实际的 JS 代码)。 - dark_rubydata()
返回的数组。只是想知道是否有一种方法可以保留形状(就像通过tensor2d.data()
返回的数组的数组一样)。 - hhh