如何使用tensorflow.js连接字符串张量?

时间:2019-01-16 17:51:53

标签: javascript tensorflow

我尝试使用tensorflow.js连接两个张量。如果两个张量都只包含数值,则可以正常工作。

var a = tf.tensor2d([[1.0, 2.0, 3.0], [10.0, 20.0, 30.0]]);
var b = tf.tensor2d([[8.0, 7.0, 5.0], [3.0, 11.0, 23.0]]);
var a_concat_b = a.concat(b, 1);
a_concat_b.print();
<script src="https://cdnjs.cloudflare.com/ajax/libs/tensorflow/0.14.2/tf.min.js"></script>

但是如果张量包含字符串,它将失败。

var c = tf.tensor2d([["1.0", "2.0", "3.0"], ["10.0", "20.0", "30.0"]]);
var d = tf.tensor2d([["8.0", "7.0", "5.0"], ["3.0", "11.0", "23.0"]]);
var c_concat_d = c.concat(d, 1);
c_concat_d.print();
<script src="https://cdnjs.cloudflare.com/ajax/libs/tensorflow/0.14.2/tf.min.js"></script>

错误消息:

  

未捕获的错误:传递给'concat'的参数'tensors [0]'必须是数字张量,但是得到了字符串张量

是否根本不可能将包含字符串的张量连接起来,或者如何实现?

tensorflow.js API documentation仅表示类型必须匹配:

  

tf.concat (tensors, axis?)

     

沿着给定的轴连接tf.Tensors的列表。

     

张量的等级和类型必须匹配,并且张量的大小在除axis之外的所有维度上都必须匹配。

提前致以最诚挚的问候。

1 个答案:

答案 0 :(得分:0)

注意:我对张量或所使用的包一点都不熟悉,所以我不知道是否有一种方法可以对字符串进行处理。

尽管我认为我有个解决方法(假设您实际上正在使用保存有字符串的数字数组)。

首先使用parseFloat方法将字符串数组更改为浮点数

var array1 = ['1.0', '2.0', '3.0'],
    array2 = ['10.0', '20.0', '30.0'],
    array3 = ['8.0', '7.0', '5.0'],
    array4 = ['3.0', '11.0', '23.0'],
    newArray1 = [],
    newArray2 = [],
    newArray3 = [],
    newArray4 = [];

for (var i=0; i<array1.length; i++) {
newArray1[i] = parseFloat(array1[i]);       
newArray2[i] = parseFloat(array2[i]);
newArray3[i] = parseFloat(array3[i]);
newArray4[i] = parseFloat(array4[i]);
}
//This is assuming the arrays are always the same length. 
//If they aren't, then you will have to make a separate for loop for each array.

现在运行代码应该可以:

var c = tf.tensor2d([newArray1, newArray2]);
var d = tf.tensor2d([newArray3, newArray4]);
var c_concat_d = c.concat(d, 1);