【问题标题】:What does the @ in split('@') do besides from being a string separator?split('@') 中的 @ 除了作为字符串分隔符之外还有什么作用?
【发布时间】:2020-12-16 19:34:52
【问题描述】:

我正在使用 Coral 开发板来加速 AI 模型。 我不明白'@' 是什么意思。

split 使用指定的“分隔符”返回字符串中所有单词的列表。但是我的模型文件的名称没有'@'。

它似乎正在为模型文件分配一个委托。

模型名称 = mobilenet_v2_1.0_224_quant_edgetpu.tflite

import argparse
import time

from PIL import Image

import classify
import tflite_runtime.interpreter as tflite
import platform

EDGETPU_SHARED_LIB = {
  'Linux': 'libedgetpu.so.1',
  'Darwin': 'libedgetpu.1.dylib',
  'Windows': 'edgetpu.dll'
}[platform.system()]

def make_interpreter(model_file):
  model_file, *device = model_file.split('@')
  return tflite.Interpreter(
      model_path=model_file,
      experimental_delegates=[
          tflite.load_delegate(EDGETPU_SHARED_LIB,
                               {'device': device[0]} if device else {})
      ])

谢谢

【问题讨论】:

  • 有没有model_file值的例子?
  • 那——“作为一个字符串分隔符”——是它的全部。它如何影响代码取决于输入字符串和预期输出。如果 model_file 值不包含 @ 则拆分结果将是 单个字符串
  • @user2864740 准确地说是一个包含单个字符串的列表
  • @njzk2 我不知道如何“打开”它。 TPU 将读取该文件以对图像进行分类。它具有算法所学到的知识。

标签: python google-coral


【解决方案1】:

对不赞成票表示歉意,我是来自 google-coral 团队的 Nam,反对票来自 stackoverflow 用户,而不是我们。您确实有一个可靠的问题,我支持@Green Cloak Guy 的回答,但是为了进一步扩展:

在我们通过 tflite API 使用多个 tpus 的文档中,您可以指定要在哪个设备上加载此模型:https://coral.ai/docs/edgetpu/multiple-edgetpu/#using-the-tensorflow-lite-python-api 基本上,如果您有 2 个 pcie 设备和 2 个 usb 设备,它将由 tflite 表示,如下所示:

pci:0
pci:1
usb:0
usb:1

我想这部分没有很好的文档记录,需要将@Green 关于 python 的答案和我们的文档放在一起。但是,当您运行演示时,不仅可以提供模型路径,还可以附加您希望在哪些设备上运行此模型,例如:

python3 classify_image.py \
  --model models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite@pci:0 \
  --labels models/inat_bird_labels.txt \
  --input images/parrot.jpg

【讨论】:

  • 好的。这就解释了一切。
【解决方案2】:

string.split() 的参数只是一个分隔符。它不做任何其他事情。如果分隔符没有出现在字符串中,则返回一个单例列表:[string]

model_file, *device = model_file.split('@')

期望model_file.split('@') 返回一个列表,并将该列表的第一个元素分配给model_file,并将所有后续元素分配给device(这就是list-unpacking operator * 在此上下文中所做的事情)。

如果在这种情况下,model_file.split('@') 将返回一个只有一个元素的列表,那么在此行执行后device 将是一个空列表[]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-04
    • 2010-09-27
    • 2020-04-06
    • 2023-03-28
    • 2012-06-27
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    相关资源
    最近更新 更多