【问题标题】:React Native with TypeScript tfjs-models/universal-sentence-encoder error on model loadReact Native 与 TypeScript tfjs-models/universal-sentence-encoder 模型加载错误
【发布时间】:2021-05-12 15:59:21
【问题描述】:

我正在尝试通过关注these instructions 在 React Native 应用程序中使用 tfjs-models/universal-sentence-encoder。但是,当我尝试加载模型时出现以下错误:

ERROR: TypeError: undefined is not an object (evaluating '_universalSentenceEncoder.default.load'

代码:

import React, { useEffect, useState } from 'react';
require('@tensorflow/tfjs');
const use = require('@tensorflow-models/universal-sentence-encoder');

export default function App() {

  useEffect(() => {
    console.log("App is starting...")
    
    const init = async () => {
      // initialize state variables 
      // console.log("App is initializing services...")
      
      // Load the model.
      try {
        use.load().then((model: any) => {
          // Embed an array of sentences.
          const sentences = [
            'Hello.',
            'How are you?'
          ];
          model.embed(sentences).then((embeddings: any) => {
            // `embeddings` is a 2D tensor consisting of the 512-dimensional embeddings for each sentence.
            // So in this example `embeddings` has the shape [2, 512].
            embeddings.print(true /* verbose */);
          });
        });
      }
      catch (err) {
        console.log(`ERROR: ${err}`);
      }
    };
  }, []);

软件包版本:

  • react-native@0.63.3
  • @tensorflow-models/universal-sentence-encoder@1.3.2
  • @tensorflow/tfjs@3.6.0
  • @tensorflow/tfjs-react-native@0.5.0

【问题讨论】:

    标签: typescript react-native tensorflow tensorflow.js


    【解决方案1】:

    我认为这与您导入通用句子编码器的方式有关,请尝试以下方法:

    import React, { useEffect, useState } from 'react';
    import * as use from '@tensorflow-models/universal-sentence-encoder';
    
    export default function App() {
    
      useEffect(() => {
        console.log("App is starting...")
        
        const init = async () => {
          // initialize state variables 
          // console.log("App is initializing services...")
          
          // Load the model.
          try {
            use.load().then((model: any) => {
              // Embed an array of sentences.
              const sentences = [
                'Hello.',
                'How are you?'
              ];
              model.embed(sentences).then((embeddings: any) => {
                // `embeddings` is a 2D tensor consisting of the 512-dimensional embeddings for each sentence.
                // So in this example `embeddings` has the shape [2, 512].
                embeddings.print(true /* verbose */);
              });
            });
          }
          catch (err) {
            console.log(`ERROR: ${err}`);
          }
        };
      }, []);
    

    【讨论】:

      【解决方案2】:

      yudhiesh 提供的答案修复了引用的错误,但产生了另一个错误。需要对代码进行更多更改,并且需要将 @tensorflow/tfjs 从 3.3.0 降级到 3.0.0(紧随 this post)。

      这是更新后的代码:

      import React, { useEffect, useState } from 'react';
      import "@tensorflow/tfjs-react-native";
      import * as tf from '@tensorflow/tfjs';
      import * as use from '@tensorflow-models/universal-sentence-encoder';
      
      export default function App() {
      
        useEffect(() => {
          console.log("App is starting...")
          
          const init = async () => {
            // initialize state variables 
            // console.log("App is initializing services...")
            
            await tf.ready();
            
            // Load the model.
            try {
              use.load().then((model: any) => {
                // Embed an array of sentences.
                const sentences = [
                  'Hello.',
                  'How are you?'
                ];
                model.embed(sentences).then((embeddings: any) => {
                  // `embeddings` is a 2D tensor consisting of the 512-dimensional embeddings for each sentence.
                  // So in this example `embeddings` has the shape [2, 512].
                  embeddings.print(true /* verbose */);
                });
              });
            }
            catch (err) {
              console.log(`ERROR: ${err}`);
            }
          };
        }, []);

      注意@tensorflow/tfjs-react-native 的导入,@tensorflow/tfjs@tensorflow-models/universal-sentence-encoder 导入方式的变化,以及添加调用await tf.ready() 以确保在尝试加载使用模型之前初始化 tensorflow。

      此代码在 iOS 模拟器上运行时会按预期生成嵌入,但在我的物理 iPhone 上运行时会生成一个包含 NaNs 的嵌入向量。这可能是一个单独的问题,因此请考虑解决此问题。

      【讨论】:

      • 问题已解决,只需要确保 @tensorflow-models/universal-sentence-encoder、@tensorflow/tfjs-react-native 和 @tensorflow/tfjs 的所有对等依赖项都满足并正确跨度>
      猜你喜欢
      • 1970-01-01
      • 2021-12-25
      • 2022-07-23
      • 2020-11-19
      • 2020-01-30
      • 2019-01-15
      • 2021-05-07
      • 2020-05-26
      • 2020-09-15
      相关资源
      最近更新 更多