В этом разделе объясняется, как выполнять преобразование между операторами torch и numpy.

Обзор

Если вы хотите экспортировать модель машинного обучения, обученную с помощью Pytorch, в формат ONNX для использования, например, с ailia SDK, вам необходимо заменить постобработку, написанную в Pytorch, на numpy. Хотя между функциями Pytorch и numpy есть много общего, синтаксис часто немного отличается.

О фонарике

Pytorch – это платформа искусственного интеллекта, разработанная Facebook, которая поддерживает тензорные операции, как и numpy, в дополнение к уровню искусственного интеллекта.



О numpy

numpy — это библиотека числовых вычислений, широко используемая в машинном обучении. Серверная часть реализована на C, а быстрые числовые операции можно выполнять на Python.



Совместимость Torch и numpy

Преобразование из факела в numpy

Получите массив numpy из torch Tensor.

numpy_tensor = torch_tensor.numpy()

Преобразование из numpy в факел

Преобразуйте массив numpy в тензор факела.

torch_tensor = torch.from_numpy(numpy_tensor)

Создайте новый тензор

Выделяет новый тензор заданной формы.

y = torch.FloatTensor(a.shape)
y = np.zeros(a.shape)

Максимум и минимум на элемент

Вычисляет максимальное и минимальное значения для каждого элемента двух тензоров.

y = torch.max(a,b)
y = torch.min(a,b)
y = np.maximum(a,b)
y = np.minimum(a,b)

Вычислить максимальное значение

Ниже приведен код для вычисления максимального значения тензора и индекса этого элемента, который выполняется одним вызовом в torch, но требует нескольких вызовов в numpy.

y_value, y_idx= torch.max(a, 1, keepdim=True)

y_value = np.max(a, axis=1, keepdims=True)
y_idx = np.argmax(a.numpy(), axis=1)
y_idx = y_idx.reshape((y_idx.shape[0],1))

Сортировка

Ниже приведен код для сортировки элементов тензора и возврата отсортированных индексов, который выполняется одним вызовом в torch, но требует нескольких вызовов в numpy.

y_value, y_idx = torch.sort(a, descending=True)

y_value = np.sort(a)
y_value = y_value[::-1]
y_idx = np.argsort(a)
y_idx = y_idx[::-1]

Клип

Обрезать значения тензора на одном ребре можно с помощью None.

y = torch.clamp(a,min=b)
y = np.clip(a,n,None)

Изменить размер

Указав -1 для количества элементов, размер определенного измерения может быть определен автоматически.

y = a.view(1,-1,1)
y = a.reshape(1,-1,1)

Конкатенация

Ниже приведен код для объединения двух тензоров.

y = torch.cat(a,b)
y = np.concatenate(a,b)

Извлечение уникальных элементов

Извлечение уникальных элементов из тензоров.

y = a.unique()
y = np.unique(a)

Добавление размеров

Увеличьте размерность тензора.

y = a.unsqueeze(0)
y = a.expand_dims(a,0)

Софтмакс

y = torch.softmax(x)

def softmax(x):
  s= np.sum(np.exp(x))
  return np.exp(x)/s
y = softmax(x)

Топор Инк. разработал ailia SDK, который обеспечивает кросс-платформенный быстрый вывод на основе графического процессора.

ax Inc. предоставляет широкий спектр услуг от консалтинга и создания моделей до разработки приложений и SDK на основе ИИ. Не стесняйтесь связаться с нами для любого запроса.