国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

全新插件tflite_flutter

Tensorflowers ? 來源:TensorFlow ? 2020-09-27 14:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

如果您希望能有一種簡單、高效且靈活的方式把 TensorFlow 模型集成到 Flutter 應用里,那請您一定不要錯過我們今天介紹的這個全新插件tflite_flutter。這個插件的開發者是 Google Summer of Code (GSoC) 的一名實習生 Amish Garg。

tflite_flutter插件的核心特性:

插件提供了與 TFLite Java 和 Swift API 相似的 Dart API,所以其靈活性和在這些平臺上的效果是完全一樣的;

插件通過 dart:ffi 直接與 TensorFlow Lite C API 相綁定,所以它比其它平臺集成方式更加高效;

無需編寫特定平臺的代碼;

通過 NNAPI 提供加速支持,在 Android 上使用 GPU Delegate,在 iOS 上使用 Metal Delegate。

本文中,我們將使用 tflite_flutter 構建一個文字分類 Flutter 應用,帶您體驗 tflite_flutter 插件。首先從新建一個 Flutter 項目text_classification_app開始。

初始化配置

Linux 和 Mac用戶

將 install.sh 拷貝到您應用的根目錄,然后在根目錄執行 sh install.sh,本例中就是目錄 text_classification_app/。

Windows 用戶

將 install.bat 文件拷貝到應用根目錄,并在根目錄運行批處理文件 install.bat,本例中就是目錄 text_classification_app/。

它會自動從GitHub 倉庫的 Releases 里下載最新的二進制資源,然后把它放到指定的目錄下。

請點擊到 README 文件里查看更多關于初始配置的信息。

tflite_flutter 的 GitHub 倉庫
https://github.com/am15h/tflite_flutter_plugin

獲取插件

在pubspec.yaml添加tflite_flutter: ^

最新版本情況參考插件的發布地址
https://pub.flutter-io.cn/packages/tflite_flutter

下載模型

要在移動端上運行 TensorFlow 訓練模型,我們需要使用 .tflite 格式。如果需要了解如何將 TensorFlow 訓練的模型轉換為 .tflite 格式,請參閱官方指南。

這里我們準備使用 TensorFlow 官方站點上預訓練的文字分類模型。

該預訓練的模型可以預測當前段落的情感是積極還是消極。它是基于來自 Mass 等人的 Large Movie Review Dataset v1.0數據集進行訓練的。數據集由基于 IMDB 電影評論所標記的積極或消極標簽組成,查看更多信息。

將 text_classification.tflite 和 text_classification_vocab.txt 文件拷貝到 text_classification_app/assets/ 目錄下。

在 pubspec.yaml 文件中添加 assets/。

assets: - assets/

現在萬事俱備,我們可以開始寫代碼了。

模型轉換器(Converter)的 Python API 指南
https://tensorflow.google.cn/lite/convert/python_api

預訓練的文字分類模型(text_classification.tflite)
https://files.flutter-io.cn/posts/flutter-cn/2020/tensorflow-lite-plugin/text_classification.tflite

數據集(text_classification_vocab.txt)
https://files.flutter-io.cn/posts/flutter-cn/2020/tensorflow-lite-plugin/text_classification_vocab.txt

實現分類器

預處理

正如文字分類模型頁面里所提到的。可以按照下面的步驟使用模型對段落進行分類:

對段落文本進行分詞,然后使用預定義的詞匯集將它轉換為一組詞匯 ID;

將生成的這組詞匯 ID 輸入 TensorFlow Lite 模型里;

從模型的輸出里獲取當前段落是積極或者是消極的概率值。

我們首先寫一個方法對原始字符串進行分詞,其中使用 text_classification_vocab.txt作為詞匯集。

在 lib/文件夾下創建一個新文件 classifier.dart。

這里先寫代碼加載 text_classification_vocab.txt 到字典里。

import 'package:flutter/services.dart'; class Classifier { final _vocabFile = 'text_classification_vocab.txt'; Map _dict; Classifier() { _loadDictionary(); } void _loadDictionary() async { final vocab = await rootBundle.loadString('assets/$_vocabFile'); var dict = {}; final vocabList = vocab.split(' '); for (var i = 0; i < vocabList.length; i++) { var entry = vocabList[i].trim().split(' '); dict[entry[0]] = int.parse(entry[1]); } _dict = dict; print('Dictionary loaded successfully'); } }

△加載字典

現在我們來編寫一個函數對原始字符串進行分詞。

import 'package:flutter/services.dart'; class Classifier { final _vocabFile = 'text_classification_vocab.txt'; // 單句的最大長度 final int _sentenceLen = 256; final String start = ''; final String pad = ''; final String unk = ''; Map _dict; List> tokenizeInputText(String text) { // 使用空格進行分詞 final toks = text.split(' '); // 創建一個列表,它的長度等于 _sentenceLen,并且使用 的對應的字典值來填充 var vec = List.filled(_sentenceLen, _dict[pad].toDouble()); var index = 0; if (_dict.containsKey(start)) { vec[index++] = _dict[start].toDouble(); } // 對于句子里的每個單詞,在映射里找到相應的索引值 for (var tok in toks) { if (index > _sentenceLen) { break; } vec[index++] = _dict.containsKey(tok) ? _dict[tok].toDouble() : _dict[unk].toDouble(); } // 按照我們的解釋器輸入 tensor 所需的格式 [1, 256] 返回 List> return [vec]; } }

△分詞代碼

使用 tflite_flutter 進行分析

這是本文的主體部分,這里我們會討論 tflite_flutter 插件的用途。

此處的分析指的是在設備上基于輸入的數據,使用 TensorFlow Lite 模型的處理過程。要使用 TensorFlow Lite 模型進行分析,需要通過解釋器來運行它,了解更多。

創建解釋器,加載模型

tflite_flutter 提供了一個方法直接通過資源創建解釋器。

static Future fromAsset(String assetName, {InterpreterOptions options})

由于我們的模型在 assets/文件夾下,需要使用上面的方法來創建解析器。對于 InterpreterOptions 的相關說明,請參考這里。

import 'package:flutter/services.dart'; // 引入 tflite_flutter import 'package:tflite_flutter/tflite_flutter.dart'; class Classifier { // 模型文件的名稱 final _modelFile = 'text_classification.tflite'; // TensorFlow Lite 解釋器對象 Interpreter _interpreter; Classifier() { // 當分類器初始化以后加載模型 _loadModel(); } void _loadModel() async { // 使用 Interpreter.fromAsset 創建解釋器 _interpreter = await Interpreter.fromAsset(_modelFile); print('Interpreter loaded successfully'); } }

△創建解釋器的代碼

如果您不希望將模型放在assets/目錄下,tflite_flutter 還提供了工廠構造函數創建解釋器,更多信息。

我們開始進行分析!

現在用下面方法啟動分析:

void run(Object input, Object output);

注意這里的方法和 Java API 中的是一樣的。

Object input 和 Object output 必須是與 Input Tensor 和 Output Tensor 維度相同的列表。

要查看 input tensor 和 output tensor 的維度,可以使用如下代碼:

_interpreter.allocateTensors(); // 打印 input tensor 列表 print(_interpreter.getInputTensors()); // 打印 output tensor 列表 print(_interpreter.getOutputTensors());

在本例中 text_classification 模型的輸出如下:

InputTensorList: [Tensor{_tensor: Pointer: address=0xbffcf280, name: embedding_input, type: TfLiteType.float32, shape: [1, 256], data: 1024] OutputTensorList: [Tensor{_tensor: Pointer: address=0xbffcf140, name: dense_1/Softmax, type: TfLiteType.float32, shape: [1, 2], data: 8]

現在,我們實現分類方法,該方法返回值為 1 表示積極,返回值為 0 表示消極。

int classify(String rawText) { // tokenizeInputText 返回形狀為 [1, 256] 的 List> List> input = tokenizeInputText(rawText); // [1,2] 形狀的輸出 var output = List(2).reshape([1, 2]); // run 方法會運行分析并且存儲輸出的值 _interpreter.run(input, output); var result = 0; // 如果輸出中第一個元素的值比第二個大,那么句子就是消極的 if ((output[0][0] as double) > (output[0][1] as double)) { result = 0; } else { result = 1; } return result; }

△用于分析的代碼

在 tflite_flutter 的 extension ListShape on List 下面定義了一些使用的擴展:

// 將提供的列表進行矩陣變形,輸入參數為元素總數并保持相等 // 用法:List(400).reshape([2,10,20]) // 返回 List List reshape(List shape) // 返回列表的形狀 List get shape // 返回列表任意形狀的元素數量 int get computeNumElements

最終的 classifier.dart 應該是這樣的:

import 'package:flutter/services.dart'; // 引入 tflite_flutter import 'package:tflite_flutter/tflite_flutter.dart'; class Classifier { // 模型文件的名稱 final _modelFile = 'text_classification.tflite'; final _vocabFile = 'text_classification_vocab.txt'; // 語句的最大長度 final int _sentenceLen = 256; final String start = ''; final String pad = ''; final String unk = ''; Map _dict; // TensorFlow Lite 解釋器對象 Interpreter _interpreter; Classifier() { // 當分類器初始化的時候加載模型 _loadModel(); _loadDictionary(); } void _loadModel() async { // 使用 Intepreter.fromAsset 創建解析器 _interpreter = await Interpreter.fromAsset(_modelFile); print('Interpreter loaded successfully'); } void _loadDictionary() async { final vocab = await rootBundle.loadString('assets/$_vocabFile'); var dict = {}; final vocabList = vocab.split(' '); for (var i = 0; i < vocabList.length; i++) { var entry = vocabList[i].trim().split(' '); dict[entry[0]] = int.parse(entry[1]); } _dict = dict; print('Dictionary loaded successfully'); } int classify(String rawText) { // tokenizeInputText 返回形狀為 [1, 256] 的 List> List> input = tokenizeInputText(rawText); //輸出形狀為 [1, 2] 的矩陣 var output = List(2).reshape([1, 2]); // run 方法會運行分析并且將結果存儲在 output 中。 _interpreter.run(input, output); var result = 0; // 如果第一個元素的輸出比第二個大,那么當前語句是消極的 if ((output[0][0] as double) > (output[0][1] as double)) { result = 0; } else { result = 1; } return result; } List> tokenizeInputText(String text) { // 用空格分詞 final toks = text.split(' '); // 創建一個列表,它的長度等于 _sentenceLen,并且使用 對應的字典值來填充 var vec = List.filled(_sentenceLen, _dict[pad].toDouble()); var index = 0; if (_dict.containsKey(start)) { vec[index++] = _dict[start].toDouble(); } // 對于句子中的每個單詞,在 dict 中找到相應的 index 值 for (var tok in toks) { if (index > _sentenceLen) { break; } vec[index++] = _dict.containsKey(tok) ? _dict[tok].toDouble() : _dict[unk].toDouble(); } // 按照我們的解釋器輸入 tensor 所需的形狀 [1,256] 返回 List> return [vec]; } }

現在,可以根據您的喜好實現 UI 的代碼,分類器的用法比較簡單。

// 創建 Classifier 對象 Classifer _classifier = Classifier(); // 將目標語句作為參數,調用 classify 方法 _classifier.classify("I liked the movie"); // 返回 1 (積極的) _classifier.classify("I didn't liked the movie"); // 返回 0 (消極的)

△ 文字分類示例應用

了解更多關于 tflite_flutter 插件的信息,請訪問 GitHub repo:am15h/tflite_flutter_plugin。

你問我答

問:tflite_flutter 和 tflite v1.0.5 有哪些區別?

tflite v1.0.5 側重于為特定用途的應用場景提供高級特性,比如圖片分類、物體檢測等等。而新的 tflite_flutter 則提供了與 Java API 相同的特性和靈活性,而且可以用于任何 tflite 模型中,它還支持 delegate。

由于使用 dart:ffi (dart (ffi) C),tflite_flutter 非常快 (擁有低延時)。而 tflite 使用平臺集成 (dart platform-channel (Java/Swift) JNI C)。

問:如何使用 tflite_flutter 創建圖片分類應用?有沒有類似 TensorFlow Lite Android Support Library 的依賴包?

TensorFlow Lite Flutter Helper Library為處理和控制輸入及輸出的 TFLite 模型提供了易用的架構。它的 API 設計和文檔與 TensorFlow Lite Android Support Library 是一樣的。更多信息請參考 TFLite Flutter Helper 的 GitHub 。

TFLite Flutter Helper 開發庫 GitHub 倉庫地址
https://github.com/am15h/tflite_flutter_helper

以上是本文的全部內容,歡迎大家對 tflite_flutter 插件進行反饋,請在 GitHub報 bug 或提出功能需求。謝謝關注,感謝 Flutter 團隊的 Michael Thomsen。

向 tflite_flutter 插件提出建議和反饋
https://github.com/am15h/tflite_flutter_plugin/issues

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • iOS
    iOS
    +關注

    關注

    8

    文章

    3401

    瀏覽量

    155495
  • 插件
    +關注

    關注

    0

    文章

    345

    瀏覽量

    23587
  • tensorflow
    +關注

    關注

    13

    文章

    334

    瀏覽量

    62187

原文標題:社區分享 | 在 Flutter 中使用 TensorFlow Lite 插件實現文字分類

文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Flutter 移動端開發:集成淘寶 API 實現商品數據實時展示 APP

    在電商蓬勃發展的當下,移動端購物成為主流趨勢。對于開發者而言,利用 Flutter 構建一個能夠實時展示淘寶商品數據的 APP,既能滿足用戶便捷獲取商品信息的需求,也能為電商業務拓展新的渠道
    的頭像 發表于 11-13 09:36 ?369次閱讀

    把edge impulse的文件存入sd卡,插入sd卡到開發板后openmv中還是顯示找不到tflite模型和labels,怎么解決?

    把edge impulse的文件存入sd卡,插入sd卡到開發板后openmv中還是顯示找不到tflite模型和labels。
    發表于 09-02 07:23

    如何進行tflite模型量化

    在windows上,如果我們按照上一期的方式安裝了tflite2pb,是不能直接運行的。因為命令行工具是為linux編譯的。
    的頭像 發表于 08-13 11:45 ?1669次閱讀
    如何進行<b class='flag-5'>tflite</b>模型量化

    Android Studio中的Gemini全面支持Dart和Flutter開發

    在 Android Studio 中創建 Android 應用的 Flutter 開發者將迎來一次重大的飛躍: Android Studio 中的 Gemini 已全面支持 Dart
    的頭像 發表于 08-06 13:52 ?1345次閱讀
    Android Studio中的Gemini全面支持Dart和<b class='flag-5'>Flutter</b>開發

    解鎖本地設備交互:機智云端插件接入Gokit5實戰指南(音量/亮度控制)

    插件使用說明機智云端插件目前支持Gokit5的按鍵亮度調節、播放音量調節,可用于自然語言控制設備。1、端插件是什么端插件是扣子插件的一種類
    的頭像 發表于 07-30 18:03 ?685次閱讀
    解鎖本地設備交互:機智云端<b class='flag-5'>插件</b>接入Gokit5實戰指南(音量/亮度控制)

    餐飲服務與軟件創新的融合:解析海底撈APP的Flutter鴻蒙開發之路

    首版本上架華為應用市場,今年1月推出全量功能商用版本。基于HarmonyOS 5.0,結合Flutter混編開發的技術探索,以下內容將從功能實現細節、技術適配經驗及生態共建啟示三方面展開,為開發者提供可復用的鴻蒙開發思路。 一、?海底撈Flutter適配
    的頭像 發表于 07-30 15:35 ?514次閱讀
    餐飲服務與軟件創新的融合:解析海底撈APP的<b class='flag-5'>Flutter</b>鴻蒙開發之路

    KiCad-Parasitics:KiCad 寄生參數分析插件

    “ ? 這是一款用于分析 PCB 編輯器中走線(wires)寄生參數的插件。 ? ” ? ? 要使用該插件,您必須在電路板上標記兩個點。通常情況下,最好是選擇由同一根走線連接的兩個焊盤。標記后,該
    的頭像 發表于 06-25 11:14 ?2053次閱讀
    KiCad-Parasitics:KiCad 寄生參數分析<b class='flag-5'>插件</b>

    用 VSCode 編寫自己的 KiCad 插件(下)

    “ ?很多小伙伴都想自己開發 KiCad 插件,但不知從何入手。本文由華秋電子的另一位 KiCad 開發者波波同學撰寫,分享了如何快速搭建環境,并開發一個簡單的插件。? ” ? ? ? 所有環境配置
    的頭像 發表于 06-19 11:44 ?2871次閱讀
    用 VSCode 編寫自己的 KiCad <b class='flag-5'>插件</b>(下)

    用VSCode編寫自己的KiCad插件(上)詳細步驟教程

    “ ?很多小伙伴都想自己開發 KiCad 插件,但不知從何入手。本文由華秋電子的另一位 KiCad 開發者波波同學撰寫,分享了如何快速搭建環境,并開發一個簡單的插件。? ” 目標 ? ? 編寫一個
    的頭像 發表于 06-17 11:10 ?3091次閱讀
    用VSCode編寫自己的KiCad<b class='flag-5'>插件</b>(上)詳細步驟教程

    使用 Flutter SDK 3.27.4構建HarmonyOS應用

    使用 Flutter SDK 3.27.4構建HarmonyOS應用 下載鴻蒙版flutter(3.27.4版本) 項目地址:https://gitcode.com/openharmony-sig
    的頭像 發表于 06-11 09:15 ?967次閱讀

    Flutter on Raspberry Pi:從入門到精通的完整指南!

    在GoogleIO會議上展示了一個在樹莓派上運行Flutter的可能性。然而,該會議并未提供全面的、一步一步的指南供用戶參考。本文旨在填補這一空白,提供詳細的操作步驟,幫助你在樹莓派上運行
    的頭像 發表于 06-06 15:37 ?1593次閱讀
    <b class='flag-5'>Flutter</b> on Raspberry Pi:從入門到精通的完整指南!

    [迅為]Linux開發小技巧:Remote - SSH插件

    [迅為]Linux開發小技巧:Remote - SSH插件
    的頭像 發表于 04-01 15:46 ?1169次閱讀
    [迅為]Linux開發小技巧:Remote - SSH<b class='flag-5'>插件</b>

    FlexBuild構建Debian 12,在“tflite_ethosu_delegate”上構建失敗了怎么解決?

    我們現在正在嘗試FlexBuild 構建的 Debian 12,但它在 “tflite_ethosu_delegate” 上構建失敗 我們知道 v24.06 中的構建過程不包括 ml(機器學習
    發表于 04-01 06:53

    edge瀏覽器識別 latex語法插件

    默認的瀏覽器是沒有latex識別功能的,容易顯示為亂碼或者源碼,無法正常識別。本插件需要在瀏覽器的擴展程序菜單下安裝,能在edge下完美運行。本插件是免費插件
    發表于 03-17 18:03 ?1次下載

    PREEvision插件使用場景介紹

    PREEvision插件中心(Add-in House)是Vector中國PREEvision團隊針對中國用戶開發的插件網站。用戶可以在這里找到各種場景的擴展插件,包括以太網與SOA設計、軟件及通信設計、硬件設計、變更管理等領域
    的頭像 發表于 03-14 13:50 ?1248次閱讀
    PREEvision<b class='flag-5'>插件</b>使用場景介紹