【发布时间】:2019-12-08 07:33:16
【问题描述】:
我的目标
我想在 Tensorflow(python) 中训练一个自定义对象检测模型,并在挖掘大量示例后使用 Tensorflow js 使用它我发现了广受欢迎的this
我做了什么
我已经编写(从在线示例中获取帮助)Tensorflow JS 部分以从本地加载模型并获取预测。我使用了 COCO 预训练模型它工作正常(所以这里没有添加代码)。
我的问题是什么
我对 python 和 Tensorflow 非常陌生。 训练的例子qqwweee/keras-yolo3模型是python,是Keras的Lamda
from keras.layers import Input, Lambda 这个地方
model.compile(optimizer=Adam(lr=1e-3), loss={
# use custom yolo_loss Lambda layer.
'yolo_loss': lambda y_true, y_pred: y_pred})
和
model.compile(optimizer=Adam(lr=1e-4), loss={'yolo_loss': lambda y_true, y_pred: y_pred}) # recompile to apply the change
和
model_loss = Lambda(yolo_loss, output_shape=(1,), name='yolo_loss',
arguments={'anchors': anchors, 'num_classes': num_classes, 'ignore_thresh': 0.5})(
[*model_body.output, *y_true])
model = Model([model_body.input, *y_true], model_loss)
所以到目前为止我的理解是,Lambda 主要用于计算损失函数,这在 TFJS 中造成了主要问题,因为到目前为止还没有实现 Lambda 层,我想使用一些替代方法来代替 lambda 层。 这是我在 TFJS 中使用训练模型时遇到的错误
Error loading layer ValueError: Unknown layer: Lambda. This may be due to one of the following reasons:
1. The layer is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code.
2. The custom layer is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().
这里"Unknown layer: Lambda" in tensorflowjs on browser也问了类似的问题,讲的是写一个自定义层,例子还不够,最终导致死胡同。
我想要什么
- 有没有办法使用任何其他损失函数而不是 lambda ?怎么样?
- 有没有为 lambda 编写自定义层的示例
- 我的理解哪里错了?
p.s:我花了很多时间寻找解决方案,任何帮助将不胜感激,在此先感谢
添加@edkeveked(谢谢!)提供的空lambda层后,错误Error loading layer ValueError: Unknown layer: Lambda消失了,但遇到了其他问题。
查看型号汇总here
现在,在模型热身过程中,出现了这个错误 热身代码
let zero = tfNode.zeros([1, 416, 416, 3]);
const result = await this.model.predict(zero)
result.map(async (t) => await t.data());
result.map(async (t) => t.dispose());
图像预测代码
batched = tfNode.tidy(() => {
if (!(img instanceof tfNode.Tensor)) {
img = tfNode.browser.fromPixels(img);
}
return img.expandDims(0);
});
result = await this.model.predict(batched);
我得到的错误
"Error: Error when checking model : the Array of Tensors that you are passing to your model is not the size the the model expected. Expected to see 4 Tensor(s), but instead got 1 Tensors(s).
at new ValueError (XXX\node_modules\@tensorflow\tfjs-layers\dist\errors.js:68:28)
at checkInputData (XXX\node_modules\@tensorflow\tfjs-layers\dist\engine\training.js:316:19)
at LayersModel.predict (XXX\node_modules\@tensorflow\tfjs-layers\dist\engine\training.js:981:9)
at ObjectDetection.warmUp (XXX\tensorflow_predownloaded_model.js:47:45)
at XXX\tensorflow_predownloaded_model.js:38:18"
【问题讨论】:
-
也许您需要注册自己的课程。 yolo loss 在做什么?
-
不完全理解,但它正在做很多事情这是代码github.com/qqwweee/keras-yolo3/blob/…
-
这里是如何注册自定义层的示例:github.com/tensorflow/tfjs-examples/tree/master/custom-layer
标签: python tensorflow keras tensorflow.js yolo