Javascript 为什么model.fit需要二维张量?为什么model.predict不接受标量张量?
我在学习TensorFlow.js时注意到model.fit必须包含两个参数:输入和输出,以及一些配置。但输入是二维张量,如下所示: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
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();//作品