我是tensorflow.js和tensorflow的新手
上下文:我们已经使用自定义视觉训练了一个模型,以便从图像中识别头发的长度:短,中,长。该模型已导出,我们希望将其与tensorflow js一起在本地使用。从自定义视觉导出的文件是* .pb文件和labels.txt文件。
我使用了tensorflowjs_converter python脚本,这是我用来在json模型中转换冻结模型* .pb的命令:
tensorflowjs_converter --input_format=tf_frozen_model --output_node_names='model_outputs' --output_json OUTPUT_JSON C:\python\tf_models\hairlength\model.pb C:\python\tf_models\exports\
Run Code Online (Sandbox Code Playgroud)
然后,将这个model.json和碎片粘贴到我的有角客户端的资产文件夹中。然后,我尝试加载模型,并给他一张图像以进行预测,但我所得到的只是索引值超出范围,因为我只需要0:长,1:中,2:短发即可。这是控制台的截图

这是我在客户端(打字稿)中用于预测的类:
import * as tf from '@tensorflow/tfjs';
// import {HAIRLENGTH_LABELS} from './hairlength';
import { FrozenModel } from '@tensorflow/tfjs';
const MODEL = 'assets/models/hairlength/model.json';
const INPUT_NODE_NAME = 'model_outputs';
const OUTPUT_NODE_NAME = 'model_outputs';
const PREPROCESS_DIVISOR = tf.scalar(255 / 2);
export class MobileNetHairLength {
private model: FrozenModel;
private labels = ['long', 'mid', 'short'];
constructor() {}
async load(){
this.model = await tf.loadGraphModel(MODEL);
}
dispose() {
if (this.model) {
this.model.dispose();
} …Run Code Online (Sandbox Code Playgroud) tensorflow angular tensorflow.js tensorflowjs-converter microsoft-custom-vision
重新培训与Tensorflow.js一起使用的MobileNet的几种方法对我来说都是失败的。有没有办法在Tensorflow.js中使用重新训练的模型?
使用现代的,基于中心的教程以及使用两者retrain.py似乎都失败了。
以及其他一些未解决的问题
另外两个最重要的问题显示了在两种情况下均失败的代码,均未解决。
目的是加载移动网络,使用自定义数据进行重新训练,然后在Tensorflow.js中使用它。遵循这两个教程似乎都失败了。可以在node.js内部完成吗?还有另一种方法吗?我在哪里犯了错误(或者该软件无法使用经过重新训练的模型)?这怎么工作?
编辑:最新的github问题和另一个问题
我试图通过宽松地遵循本教程来重新训练用于自定义对象检测的mobilenet_v2模型。我的最终目标是要查询一个web_model,该模型将提供分数,classId和检测次数。最终导出的推理模型可在python环境中使用,但当前在转换为Web时会引发奇怪的错误。
感觉我的管道中缺少某个步骤,无法将推理图转换为Web。这似乎与model_main.py设置有关is_training=True,最终与最终的推理模型混为一谈。我似乎找不到关于如何从受过训练的模型中生成非训练模型的任何支持文档或教程。
我一直在使用tensorflow-gpu 1.13.1并model_main.py重新训练由对象检测zoo提供的当前ssd_mobilenet_v2_coco模型。我也尝试过使用legacy train.py和tensorflow 1.14.0。
当需要将其转换为tfjs时,我同时使用了tensorflowjs 1.2.2.1和0.8.6,当试图在Web上运行最终结果时,都导致了相同的错误。
我还尝试过在冻结模型上执行中间图变换,然后再使用0.8.6对其进行转换。
训练模型:
python model_main.py --model_dir=output --pipeline_config_path=training\ssd_mobilenet_v2_coco.config -num_train_steps=200000
Run Code Online (Sandbox Code Playgroud)
导出推理图:
python export_inference_graph.py --input_type=image_tensor --output_directory=output_inf --pipeline_config_path=training\ssd_mobilenet_v2_coco.config --trained_checkpoint_prefix=neg_32\model.ckpt-XXXX
Run Code Online (Sandbox Code Playgroud)
使用tfjs 1.2.2.1进行转换:
tensorflowjs_converter --input_format=tf_saved_model --output_format=tfjs_graph_model --saved_model_tags=serve --signature_name=serving_default output_inf\saved_model output_inf\web_model
Run Code Online (Sandbox Code Playgroud)
在浏览器中测试模型:
import * as tf from '@tensorflow/tfjs';
class Detector {
async init() {
try {
this.model = await tf.loadGraphModel('/web_model/model.json');
} catch (err) {
console.log(err);
}
}
async detect(frame) {
const { model } = this;
const INPUT_TENSOR='image_tensor';
const …Run Code Online (Sandbox Code Playgroud) javascript python tensorflow tensorflow.js tensorflowjs-converter
我按照https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html的示例在一些图像上训练了 CNN 模型。我的模型代码是相同的,我只是在另一个图像数据集上训练它:也用于两个类之间的分类。
结果是您对训练集的期望:图像被正确分类为 0 或 1。
我在tensorflowjs友好的格式保存的模型下面的“替代方案:使用Python API出口直接TF.js层格式”的部分 https://js.tensorflow.org/tutorials/import-keras.html
但是,当我尝试使用 javascript 访问 html 页面中的结果时,几乎每个图像(或接近它)都会得到 1:即使图像在 Keras 中给出 0。
我什至在 JSON 中将图像保存为张量,在 Keras 中得到 0,在 TensorflowJS 中得到 1。这是一个错误还是我在某个地方犯了错误?
这是我在 TensorflowJS 中访问 json 的代码:
<html>
<head>
<!-- Load TensorFlow.js -->
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.13.0"></script>
<script>
// /sf/answers/1282706911/
function callAjax(url, callback){
var xmlhttp;
// compatible with IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
callback(xmlhttp.responseText); …Run Code Online (Sandbox Code Playgroud) 我是新来的机器学习和我下面这个博客如何编写与mobilenet的典范。
我设法转换了 .h5 文件模型并尝试在我的网络应用程序上实现它。
不幸的是,当我尝试加载 JSON 模型时,出现此错误:
未捕获(承诺)错误:提供的重量数据没有目标变量:block1_conv1_2/kernel。
我在命令行中转换了 .h5 模型,如下所示:
tensorflowjs_converter --input_format keras model.h5 ConvertedModel/
在浏览器中加载模型的代码,我关注了这个博客
let model;
async function loadModel(name) {
$(".progress-bar").show();
model = undefined;
model = await tf.loadModel(`ConvertedModel/model.json`);
$(".progress-bar").hide();
}Run Code Online (Sandbox Code Playgroud)
要查看模型的代码,请参阅博客链接。但下面是模型编译方式的截图。 模型编译
依赖项:
任何解决此问题的帮助将不胜感激。非常感谢。
是否可以将图模型转换为图层模型?官方 TensorFlow js 转换器 ( https://github.com/tensorflow/tfjs/tree/master/tfjs-converter ) 目前不支持此功能,或者是否有无法工作的原因?
从TensorFlow.js中的通用句子编码器开始,我注意到嵌入中数字的范围不是我所期望的。我原本期望[0-1]或[-1,1]之间有一些分配,但都看不到。
句子“猫很棒!” 这是一个可视化效果,其中每个维度都投影到[-0.5,0.5]的比例上:
这与“我不知道该句子的嵌入内容将是什么”(这是我尝试的前10个句子的模式相似)的可视化形式相同:
为了进行调试,我查看了演示的Colab笔记本中是否出现了同样的事情,看起来确实如此。这是我看到的那两个句子的嵌入范围的结果:
# NEW: added this, with different messages
messages = ["cats are great!", "sometimes models are confusing"]
values, indices, dense_shape = process_to_IDs_in_sparse_format(sp, messages)
with tf.Session() as session:
session.run([tf.global_variables_initializer(), tf.tables_initializer()])
message_embeddings = session.run(
encodings,
feed_dict={input_placeholder.values: values,
input_placeholder.indices: indices,
input_placeholder.dense_shape: dense_shape})
for i, message_embedding in enumerate(np.array(message_embeddings).tolist()):
print("Message: {}".format(messages[i]))
print("Embedding size: {}".format(len(message_embedding)))
message_embedding_snippet = ", ".join(
(str(x) for x in message_embedding[:3]))
print("Embedding: [{}, ...]\n".format(message_embedding_snippet))
# NEW: added this, to show the range of the embedding …Run Code Online (Sandbox Code Playgroud) tensorflow word-embedding tensorflow.js tensorflowjs-converter