Инфраструктура для глубокого обучения — Tensor (Pytorch Edition)

искусственный интеллект PyTorch
Инфраструктура для глубокого обучения — Tensor (Pytorch Edition)

Это 4-й день моего участия в августовском испытании обновлений.Подробности о событии:Испытание августовского обновления

Что касается определения и понимания тензоров, я буду говорить с вами, основываясь на своем собственном познании Личное познание ограничено, а тензоры только поверхностны. Поскольку Tensor действительно слишком сложен, я объясню тензоры только с точки зрения глубокого обучения и почему глубокое обучение вводит понятие тензоров.

Что такое тензор

В рамках глубокого обучения большая часть данных существует в формате данных Tensor, Вам может быть интересно, что такое Tensor (тензор). Сначала дадим определение тензора,Величина, которая преобразуется по определенному правилу в различных системах отсчета, является тензором.Преимущество тензора в том, что законы физики не изменятся при изменении системы отсчета, поэтому благодаря глубокому обучению и структуре данных тензора можно представить большинство вещей в мире, поэтому глубокое обучение использует тензор в качестве основы. структура данных.

В глубоком обучении нам нужны структурированные данные для описания вещей. Например, температура погоды, имеющая только числовую величину, является скаляром, а скаляр можно понимать как 0-мерный тензор. По сути, так называемый скаляр представляет собой точку в пространстве, и если мы выберем разные системы координат, его значение будет другим.x'=f(x)x^{\prime} = f(x)Здесь f представляет собой меру, фактическиxxиx'x^{\prime}

Скорость – это величина, которая имеет как величину, так и направление. Для ее представления обычно используется вектор. Вектор можно разложить на компоненты x и y. Вектор может представлять собой линейную комбинацию двух двух компонентов. Вектор — это одномерное число. тензор, который может быть Поскольку каждая из его компонент является 1-мерной, вектор является тензором порядка 1

Далее поговорим о матрицах. Трехмерная матрица может быть представлена ​​комбинацией компонентов xy, zy, yx, zx, zy, zx. Если на плоскость действует вертикальная плоскость и сила вдоль плоскости, то мы Его нужно представить многомерным тензором.

Строительство окружающей среды

  • Анаконда должна быть установлена ​​в первую очередь
  • Установите Питорч

Я не буду слишком много рассказывать об установке Anaconda и Pytorch.

import torch
import numpy as np
# 创建了 2 行 3 列,
a = torch.randn(2,3)

Получить тип тензора

Есть два способа судить о типе тензора в pytorch.Один — вызвать метод типа объекта тензора, а другой — использовать isinstance для оценки типа тензора.Если вы используете тип для получения типа тензора, информация о типе не используется.type или isinstance для получения более подробной информации о типе. Поэтому рекомендуется использовать метод tensor.type() или isinstance для оценки типа тензора.

a.type()#'torch.FloatTensor'

Обратите внимание, что если для вывода типа используется type, то только a является типом torch.Tensor, и более подробный и точный тип не предоставляется. Обратите внимание, что a.type() — это возврат метода

type(a)#torch.Tensor
isinstance(a,torch.FloatTensor)#True
isinstance(a,torch.cuda.DoubleTensor)#False

`

0-мерный тензор (скалярный)

0-мерный тензор можно рассматривать как скаляр.В pytorch форма 0-мерного тензора обычно равна 0. Вызовите форму const_2, чтобы увидеть, что скалярный тип const_2 равенtorch.Size([]). здесьtorch.Size([])представляет собой представление типа измерения, а не пустое представление[]тензор.

const_1 = torch.tensor(1.)
const_1 #tensor(1.)
const_2 = torch.tensor(1.3)
const_2#tensor(1.3000)
const_2.shape#torch.Size([])

Тип const_2 можно увидеть, вызвав shape и dim

len(const_2.shape) #0
const_2.dim() #0
const_2.size()#torch.Size([])

Одномерный тензор (вектор)

В pytorch одномерный тензор можно рассматривать как вектор, поэтому в нейронной сети, где используется вектор, фактически каждый из наших скрытых слоев представлен весом и смещением (значением смещения).

# 创建一个 tensor
vec_1 = torch.tensor([1.2])
vec_1 #tensor([1.2000])
vec_2 = torch.tensor([1.2,1.3])
vec_2 #tensor([1.2000, 1.3000])
vec_3 = torch.FloatTensor(1)
vec_3 #tensor([0.])
vec_5 = torch.FloatTensor(2)
vec_5 #tensor([1.4569e-19, 6.4069e+02])
data = np.ones(2)
data #array([1., 1.])
vec_6 = torch.from_numpy(data)
vec_6 #tensor([1., 1.], dtype=torch.float64)
# ones 创建 2 
a = torch.ones(2)
a #tensor([1., 1.])
b = torch.Size([2])
b #torch.Size([2])

2-мерный тензор (матрица)

В pytorch для представления изображений в основном используется 2-мерная матрица.В компьютерах мы используем 2-мерную матрицу для представления положения каждого пикселя изображения, а затем представляем информацию о цвете и прозрачности пикселя через канал измерение. Возьмите набор данных mnist в качестве примера, чтобы проиллюстрировать использование 2-мерных матриц в нейронных сетях, Входное изображение28×2828 \times 28, затем сгладьте 2-мерное изображение до 1-мерного 784-мерного, а затем, если вы введете длину изображения, оно32×78432 \times 784означает, что каждая партия равна 32

a = torch.rand(2,3)
a
tensor([[0.5607, 0.9660, 0.3631],
        [0.9655, 0.8591, 0.2379]])
a.shape #torch.Size([2, 3])
a.size(0)#2
a.size(1)#3
a.shape[0] #2

Как использовать Tensor для представления текста

Что касается 3-мерного тензора, мы все еще исходим из реальности. В сети RNN будет использоваться 3-мерный тензор. Далее давайте посмотрим. Вход представляет собой 3-мерный тензор. 10 означает 10 слов в предложении, 20 означает 20 предложений в пакете, 100 означает 100-мерный вектор для представления слова.

a = torch.rand(1,2,3)
a
tensor([[[0.0202, 0.9752, 0.4535],
         [0.7427, 0.5266, 0.2373]]])
a.shape #torch.Size([1, 2, 3])
list(a.shape)#[1, 2, 3]
a[0]
tensor([[0.0202, 0.9752, 0.4535],
        [0.7427, 0.5266, 0.2373]])
a[0][0] #tensor([0.0202, 0.9752, 0.4535])


a[0][0][0] #tensor(0.0202)

Как использовать Tensor для представления изображений

Например, у нас есть два изображения для ввода в сеть.Для сверточной нейронной сети, если мы хотим сохранить информацию о положении изображения, нам нужна информация о положении изображения, чтобы использовать два измерения для представления положения каждого пикселя изображения, то есть , 28 и 28, и, наконец, используйте Измерение 1 представляет количество каналов каждого пикселя, например, это может быть 3 канала для представления RGB или 1 для представления информации в градациях серого.

a = torch.rand(2,3,28,28)
# a
a.shape #torch.Size([2, 3, 28, 28])

a.numel() #4704