Tensorflow.js:检查目标时出错...期望层有 n 个维度
Tensorflow.js: Error when checking target ... expected layer to have n dimensions
我刚开始使用 Tensorflow.js,我正在尝试构建一个简单的模型,将 28 x 28 数组(每个数组代表一张图片)作为输入。但是有些东西连接不正确。 运行 下面的片段,我得到:
errors.ts:48 Uncaught (in promise) Error: Error when checking target: expected dense_Dense1 to have 2 dimension(s). but got array with shape 100,28,28
at new e (errors.ts:48)
at Od (training.ts:147)
at e.standardizeUserData (training.ts:1133)
at training_tensors.ts:427
at common.ts:14
at Object.next (common.ts:14)
at common.ts:14
at new Promise (<anonymous>)
at op (common.ts:14)
at kd (training_tensors.ts:408)
这是代码本身:
// build the model
var input = tf.input({shape: [28,28]})
var h1 = tf.layers.reshape({targetShape: [28*28]}).apply(input)
var h2 = tf.layers.dense({units: 100}).apply(h1)
var model = tf.model({inputs: input, outputs: h2})
model.compile({optimizer: 'sgd', loss: 'meanSquaredError', lr: 0.0001})
model.summary();
// get training data and train
var trainX = tf.ones([100,28,28]);
model.fit(trainX, trainX, {
batchSize: 10,
epochs: 1,
})
<script src='https://cdnjs.cloudflare.com/ajax/libs/tensorflow/1.1.2/tf.min.js'></script>
让我感到困惑的是 model.summary()
调用 returns:
_________________________________________________________________
layer_utils.ts:152 Layer (type) Output shape Param #
layer_utils.ts:64 =================================================================
layer_utils.ts:152 input1 (InputLayer) [null,28,28] 0
layer_utils.ts:74 _________________________________________________________________
layer_utils.ts:152 reshape_Reshape1 (Reshape) [null,784] 0
layer_utils.ts:74 _________________________________________________________________
layer_utils.ts:152 dense_Dense1 (Dense) [null,100] 78500
layer_utils.ts:74 =================================================================
layer_utils.ts:83 Total params: 78500
layer_utils.ts:84 Trainable params: 78500
layer_utils.ts:85 Non-trainable params: 0
layer_utils.ts:86 _________________________________________________________________
这表明重塑层应该将形状为 (batch, 784) 的数组传递给密集层,但错误提示并非如此。
有谁知道我在这里做错了什么?欢迎任何建议!
我的输入有形状(批次,28、28),而模型输出有形状(批次,100)。但是,我要求我的模型预测 trainX
给定输入 trainX
(分别为 model.fit
的第二个和第一个参数)。
为了解决这个问题,我只需要将要预测的值的形状更新为(批次,100):
// build the model
var input = tf.input({shape: [28,28]})
var h1 = tf.layers.reshape({targetShape: [28*28]}).apply(input)
var h2 = tf.layers.dense({units: 17}).apply(h1)
var model = tf.model({inputs: input, outputs: h2})
model.compile({optimizer: 'sgd', loss: 'meanSquaredError', lr: 0.0001})
model.summary();
// get training data and train
var trainX = tf.ones([100,28,28]),
trainY = tf.ones([100, 17])
model.fit(trainX, trainY, {
batchSize: 10,
epochs: 1,
}).then(function() {
console.log( model.predict(trainX).dataSync() )
})
我刚开始使用 Tensorflow.js,我正在尝试构建一个简单的模型,将 28 x 28 数组(每个数组代表一张图片)作为输入。但是有些东西连接不正确。 运行 下面的片段,我得到:
errors.ts:48 Uncaught (in promise) Error: Error when checking target: expected dense_Dense1 to have 2 dimension(s). but got array with shape 100,28,28
at new e (errors.ts:48)
at Od (training.ts:147)
at e.standardizeUserData (training.ts:1133)
at training_tensors.ts:427
at common.ts:14
at Object.next (common.ts:14)
at common.ts:14
at new Promise (<anonymous>)
at op (common.ts:14)
at kd (training_tensors.ts:408)
这是代码本身:
// build the model
var input = tf.input({shape: [28,28]})
var h1 = tf.layers.reshape({targetShape: [28*28]}).apply(input)
var h2 = tf.layers.dense({units: 100}).apply(h1)
var model = tf.model({inputs: input, outputs: h2})
model.compile({optimizer: 'sgd', loss: 'meanSquaredError', lr: 0.0001})
model.summary();
// get training data and train
var trainX = tf.ones([100,28,28]);
model.fit(trainX, trainX, {
batchSize: 10,
epochs: 1,
})
<script src='https://cdnjs.cloudflare.com/ajax/libs/tensorflow/1.1.2/tf.min.js'></script>
让我感到困惑的是 model.summary()
调用 returns:
_________________________________________________________________
layer_utils.ts:152 Layer (type) Output shape Param #
layer_utils.ts:64 =================================================================
layer_utils.ts:152 input1 (InputLayer) [null,28,28] 0
layer_utils.ts:74 _________________________________________________________________
layer_utils.ts:152 reshape_Reshape1 (Reshape) [null,784] 0
layer_utils.ts:74 _________________________________________________________________
layer_utils.ts:152 dense_Dense1 (Dense) [null,100] 78500
layer_utils.ts:74 =================================================================
layer_utils.ts:83 Total params: 78500
layer_utils.ts:84 Trainable params: 78500
layer_utils.ts:85 Non-trainable params: 0
layer_utils.ts:86 _________________________________________________________________
这表明重塑层应该将形状为 (batch, 784) 的数组传递给密集层,但错误提示并非如此。
有谁知道我在这里做错了什么?欢迎任何建议!
我的输入有形状(批次,28、28),而模型输出有形状(批次,100)。但是,我要求我的模型预测 trainX
给定输入 trainX
(分别为 model.fit
的第二个和第一个参数)。
为了解决这个问题,我只需要将要预测的值的形状更新为(批次,100):
// build the model
var input = tf.input({shape: [28,28]})
var h1 = tf.layers.reshape({targetShape: [28*28]}).apply(input)
var h2 = tf.layers.dense({units: 17}).apply(h1)
var model = tf.model({inputs: input, outputs: h2})
model.compile({optimizer: 'sgd', loss: 'meanSquaredError', lr: 0.0001})
model.summary();
// get training data and train
var trainX = tf.ones([100,28,28]),
trainY = tf.ones([100, 17])
model.fit(trainX, trainY, {
batchSize: 10,
epochs: 1,
}).then(function() {
console.log( model.predict(trainX).dataSync() )
})