Javascript 为什么model.fit需要二维张量?为什么model.predict不接受标量张量?

Javascript 为什么model.fit需要二维张量?为什么model.predict不接受标量张量?,javascript,multidimensional-array,neural-network,tensor,tensorflow.js,Javascript,Multidimensional Array,Neural Network,Tensor,Tensorflow.js,我在学习TensorFlow.js时注意到model.fit必须包含两个参数:输入和输出,以及一些配置。但输入是二维张量,如下所示: let input=tf.tensor2d([1,2,3,4,5],[5,1]) 这看起来非常像一维张量,如下所示: let input=tf.tensor1d([1,2,3,4,5]) 因为二维张量实际上是5乘1,我决定用一维张量代替它。然而,这完全停止了程序的工作。那么,是否有某种类型的代码表示输入必须是二维的?如果是,为什么 关于多维张量,我还注意到mo

我在学习TensorFlow.js时注意到model.fit必须包含两个参数:输入和输出,以及一些配置。但输入是二维张量,如下所示:

let input=tf.tensor2d([1,2,3,4,5],[5,1])
这看起来非常像一维张量,如下所示:

let input=tf.tensor1d([1,2,3,4,5])
因为二维张量实际上是5乘1,我决定用一维张量代替它。然而,这完全停止了程序的工作。那么,是否有某种类型的代码表示输入必须是二维的?如果是,为什么

关于多维张量,我还注意到model.predict不能接受零维张量或标量。见下文

工作代码:
模型预测(tf.tensor1d([6]))
非工作代码:
模型预测(tf标量(6))

如果有人能澄清这些限制背后的原因,那将不胜感激。

二维张量不是一维张量。
tf.tensor2d([1,2,3,4,5],[5,1])
不是
tf.tensor1d([1,2,3,4,5])
。一个可以转换为另一个,但这并不意味着它们是相等的

model.fit
将张量或秩2或更多作为参数。这个张量可以看作是一组元素,其形状被赋予模型的输入。模型的
inputShape
是构成
模型的秩1中的最小值。将
参数至少调整为2(1+1始终是inputShape的秩+1)

由于model.fit和model.predict将具有相同秩的张量作为参数,因此model.predict参数是具有上述相同原因的秩2或更多的张量

然而,
model.predict(tf.tensor1d([6])
。之所以如此,是因为在内部,tensorflow.js会将一维张量转换为二维张量。形状[6]的初始张量将转换为形状[6,1]的张量

model.predict(tf.tensor1d([6])) 
// will work because it is a 1D tensor 
// and only in the case where the model first layer inputShape is [1]

model.predict(tf.tensor2d([[6]])) 
// will also work
// One rank higher than the inputShape and of shape [1, ...InputShape]

model.predict(tf.scalar(6)) // will not work
const model=tf.sequential(
{layers:[tf.layers.dense({units:1,inputShape:[1]})];
model.predict(tf.ones([3]).print();//作品
model.predict(tf.ones([3,1]).print();//作品

二维张量不是一维张量。
tf.tensor2d([1,2,3,4,5],[5,1])
不是
tf.tensor1d([1,2,3,4,5])
。一个可以转换为另一个,但这并不意味着它们是相等的

model.fit
将张量或秩2或更多作为参数。这个张量可以看作是一组元素,其形状被赋予模型的输入。模型的
inputShape
是构成
模型的秩1中的最小值。将
参数至少调整为2(1+1始终是inputShape的秩+1)

由于model.fit和model.predict将具有相同秩的张量作为参数,因此model.predict参数是具有上述相同原因的秩2或更多的张量

然而,
model.predict(tf.tensor1d([6])
。之所以如此,是因为在内部,tensorflow.js会将一维张量转换为二维张量。形状[6]的初始张量将转换为形状[6,1]的张量

model.predict(tf.tensor1d([6])) 
// will work because it is a 1D tensor 
// and only in the case where the model first layer inputShape is [1]

model.predict(tf.tensor2d([[6]])) 
// will also work
// One rank higher than the inputShape and of shape [1, ...InputShape]

model.predict(tf.scalar(6)) // will not work
const model=tf.sequential(
{layers:[tf.layers.dense({units:1,inputShape:[1]})];
model.predict(tf.ones([3]).print();//作品
model.predict(tf.ones([3,1]).print();//作品