Функция PyTorch torch.expand_as
Справочное руководство PyTorch torch
torch.expand_asявляется функцией в PyTorch, используемой для расширения тензора до тех же размеров, что и другой тензор. Этоtorch.expandудобный вариант, который автоматически использует размеры эталонного тензора для расширения.
Определение функции
torch.expand_as(other)
Parameters:
other(Tensor): эталонный тензор; текущий тензор будет расширен до тех же размеров, что и этот тензор.
Возвращаемое значение:
torch.Tensor: Возвращает представление расширенного тензора.
Примеры использования
Пример
import torch
# Создать вектор
x = torch.tensor([1, 2, 3, 4])
# Создать целевую матрицу
other = torch.randn(3, 4)
# Расширить x до той же формы, что и other
y = x.expand_as(other)
print("Исходная форма вектора:", x.shape)
print("Форма эталонного тензора:", other.shape)
print("Расширенная форма:", y.shape)
print("nРасширенный тензор:")
print(y)
# Создать вектор
x = torch.tensor([1, 2, 3, 4])
# Создать целевую матрицу
other = torch.randn(3, 4)
# Расширить x до той же формы, что и other
y = x.expand_as(other)
print("Исходная форма вектора:", x.shape)
print("Форма эталонного тензора:", other.shape)
print("Расширенная форма:", y.shape)
print("nРасширенный тензор:")
print(y)
Вывод:
原始向量形状: torch.Size([4])
参考张量形状: torch.Size([3, 4])
扩展后形状: torch.Size([3, 4])
扩展后的张量:
tensor([[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4]])
Пример
import torch
# Создать вектор-столбец
x = torch.tensor([[1], [2], [3]])
# Создать целевой 3D-тензор
other = torch.randn(3, 4, 5)
# Расширить x до той же формы, что и other
y = x.expand_as(other)
print("Форма исходного вектора-столбца:", x.shape)
print("Форма эталонного тензора:", other.shape)
print("Расширенная форма:", y.shape)
# Создать вектор-столбец
x = torch.tensor([[1], [2], [3]])
# Создать целевой 3D-тензор
other = torch.randn(3, 4, 5)
# Расширить x до той же формы, что и other
y = x.expand_as(other)
print("Форма исходного вектора-столбца:", x.shape)
print("Форма эталонного тензора:", other.shape)
print("Расширенная форма:", y.shape)
Вывод:
原始列向量形状: torch.Size([3, 1]) 参考张量形状: torch.Size([3, 4, 5]) 扩展后形状: torch.Size([3, 4, 5])
Пример
import torch
# Пример применения в нейронных сетях
# Предположим, есть вектор смещения, который нужно транслировать в карту признаков
bias = torch.tensor([0.1, 0.2, 0.3]) # Смещение для 3 каналов
# Смоделировать выход карты признаков свёртки (batch, channel, height, width)
feature_map = torch.randn(8, 3, 32, 32)
# Расширить смещение до той же формы, что и карта признаков
bias_expanded = bias.expand_as(feature_map)
print("Форма смещения:", bias.shape)
print("Форма карты признаков:", feature_map.shape)
print("Форма расширенного смещения:", bias_expanded.shape)
# Добавить смещение
output = feature_map + bias_expanded
print("Форма nOutput после добавления смещения:", output.shape)
# Пример применения в нейронных сетях
# Предположим, есть вектор смещения, который нужно транслировать в карту признаков
bias = torch.tensor([0.1, 0.2, 0.3]) # Смещение для 3 каналов
# Смоделировать выход карты признаков свёртки (batch, channel, height, width)
feature_map = torch.randn(8, 3, 32, 32)
# Расширить смещение до той же формы, что и карта признаков
bias_expanded = bias.expand_as(feature_map)
print("Форма смещения:", bias.shape)
print("Форма карты признаков:", feature_map.shape)
print("Форма расширенного смещения:", bias_expanded.shape)
# Добавить смещение
output = feature_map + bias_expanded
print("Форма nOutput после добавления смещения:", output.shape)
Вывод:
偏置形状: torch.Size([3]) 特征图形状: torch.Size([8, 3, 32, 32]) 扩展后偏置形状: torch.Size([8, 3, 32, 32]) 加上偏置后的输出形状: torch.Size([8, 3, 32, 32])
Примечание:torch.expand_asТолько измерения размера 1 можно расширить до больших размеров.otherРазмер тензора должен быть совместим с расширенным размером (т.е. текущие размеры тензора могут быть расширены до целевого размера с помощью broadcasting). Возвращается представление, а не копия.
Другие расширения