将keras模型加载到tfjs导致输入形状不匹配
Loading a keras model into tfjs causes input shape mismatch
我在Keras做了一个模型,保存为tfjs模型。我成功地将它导入到我的js项目中。但是,由于输入形状错误,我无法在我的 JS 代码中使用该模型。
凯拉斯模型:
# Python
model = keras.Sequential([keras.layers.Dense(8,
activation='sigmoid', input_dim=4),
keras.layers.Dense(3, activation='softmax')])
model.compile(optimizer='adam',loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit(dx, dy, epochs=100, batch_size = 5)
当我像这样在 python 文件中使用它时,它按预期工作,例如:
# Python
model.predict_classes([[5.1, 3.5, 1.4, 0.2]]) # This works
然而,当我在 JS 中尝试使用
// JS
sv = tf.tensor([s1v, s2v, s3v, s4v]) //s1v to s4v are floats
var pred = await model.predict(sv); // This gives an error
出现此错误:
tfjs@latest:17 未捕获(承诺)错误:检查时出错:预期 dense_13_input 具有形状 [null,4] 但得到形状为 [4,1] 的数组。
我不断收到同样的错误:
- 将 s1v...s4v 单独声明为 tf.scalars 并用 tf.stack()
堆叠它们
- 将 s1v...s4v 单独声明为 tf.tensor1d 并使用 tf.stack()
堆叠它们
- 在单个 tf.tensor1d 中声明 s1...s4v
请帮我解决这个问题...
我知道这个问题有两个修复方法
- 在张量上再增加一对括号
sv = tf.tensor([[s1v, s2v, s3v, s4v]])
- 将形状指定为第二个参数
sv = tf.tensor([s1v, s2v, s3v, s4v], [1, 4])
我在Keras做了一个模型,保存为tfjs模型。我成功地将它导入到我的js项目中。但是,由于输入形状错误,我无法在我的 JS 代码中使用该模型。 凯拉斯模型:
# Python
model = keras.Sequential([keras.layers.Dense(8,
activation='sigmoid', input_dim=4),
keras.layers.Dense(3, activation='softmax')])
model.compile(optimizer='adam',loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit(dx, dy, epochs=100, batch_size = 5)
当我像这样在 python 文件中使用它时,它按预期工作,例如:
# Python
model.predict_classes([[5.1, 3.5, 1.4, 0.2]]) # This works
然而,当我在 JS 中尝试使用
// JS
sv = tf.tensor([s1v, s2v, s3v, s4v]) //s1v to s4v are floats
var pred = await model.predict(sv); // This gives an error
出现此错误:
tfjs@latest:17 未捕获(承诺)错误:检查时出错:预期 dense_13_input 具有形状 [null,4] 但得到形状为 [4,1] 的数组。
我不断收到同样的错误:
- 将 s1v...s4v 单独声明为 tf.scalars 并用 tf.stack() 堆叠它们
- 将 s1v...s4v 单独声明为 tf.tensor1d 并使用 tf.stack() 堆叠它们
- 在单个 tf.tensor1d 中声明 s1...s4v
请帮我解决这个问题...
我知道这个问题有两个修复方法
- 在张量上再增加一对括号
sv = tf.tensor([[s1v, s2v, s3v, s4v]])
- 将形状指定为第二个参数
sv = tf.tensor([s1v, s2v, s3v, s4v], [1, 4])