Что делает @ в split('@') помимо того, что он является разделителем строк?

Я использую доску разработки Coral для ускорения моделей ИИ. Я не понимаю, что означает '@'.

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 {})
      ])

Спасибо


person Aizzaac    schedule 27.08.2020    source источник
comment
у вас есть пример значения model_file?   -  person njzk2    schedule 28.08.2020
comment
Это — «быть разделителем строк» ​​— это все, что он делает. Как это влияет на код, зависит от входной строки и ожидаемого результата. Если значение model_file не содержит @, результатом разделения будет одна строка.   -  person user2864740    schedule 28.08.2020
comment
@user2864740 user2864740 список с одной строкой, если быть точным   -  person DeepSpace    schedule 28.08.2020
comment
@njzk2 Я не знаю, как его открыть. Это файл, который TPU будет читать для классификации изображений. У него есть то, чему научился алгоритм.   -  person Aizzaac    schedule 28.08.2020


Ответы (2)


Извиняюсь за отрицательные отзывы, меня зовут Нам из команды google-coral, отрицательные отзывы исходят от пользователей stackoverflow, а не от нас. У вас действительно есть серьезный вопрос, и я второй ответ @Green Cloak Guy, однако, чтобы еще больше расширить это:

В нашей документации по использованию нескольких tpus с API tflite вы можете указать, на какое устройство вы хотите загрузить эту модель: 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
person Nam Vu    schedule 28.08.2020
comment
Ok. Это все объясняет. - person Aizzaac; 04.09.2020

Аргумент string.split() — это просто разделитель. Он не делает ничего другого. Если разделитель не появляется в строке, то возвращается одноэлементный список: [string].

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

ожидает, что model_file.split('@') вернет список, и назначает первый элемент этого списка model_file, а все последующие элементы — device (это то, что оператор распаковки списка * делает в этом контексте).

Если, как в этом случае, model_file.split('@') вернет список только с одним элементом, то device будет пустым списком [] после выполнения этой строки.

person Green Cloak Guy    schedule 27.08.2020