我尝试使用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
之外的所有维度上都必须匹配。
提前致以最诚挚的问候。
答案 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);