Функция PyTorch torch.zeros
Справочное руководство Pytorch torch
torch.zerosЭто функция в PyTorch, используемая для создания тензоров, состоящих из нулей. Она создаёт тензор заданной формы, все элементы которого инициализированы значением 0.
Это один из самых распространённых способов инициализации тензоров в глубоком обучении; часто используется для создания векторов смещения, заполнителей или инициализации параметров модели.
Определение функции
torch.zeros(*size, dtype=None, device=None, requires_grad=False, pin_memory=False)
Parameters:
*size(int): форма тензора, например.3、(3, 4)、(2, 3, 4)и т. д.dtype(torch.dtype, необязательно): задаёт тип данных тензора, по умолчаниюtorch.float32。device(torch.device, необязательно): задаёт устройство, на котором хранится тензор.requires_grad(bool, необязательно): Вычислять ли градиенты.pin_memory(bool, необязательно): использовать ли закреплённую память.
Возвращаемое значение:
torch.Tensor: Возвращает тензор, заполненный нулями.
Примеры использования
Ниже приведены некоторыеtorch.zerosпримеры использования функции.
Пример 1: Создание 1D-тензора, заполненного нулями
Пример
# Создать тензор, заполненный нулями, содержащий 5 элементов
x = torch.zeros(5)
print(x)
Результат вывода:
tensor([0., 0., 0., 0., 0.])
В этом примере мы создали 1D-тензор, заполненный нулями, содержащий 5 элементов.
Пример 2: Создание 2D-тензора, заполненного нулями
Пример
# Создать тензор 3x4, заполненный нулями (матрицу)
x = torch.zeros(3, 4)
print(x)
print(x.shape)
Результат вывода:
tensor([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
torch.Size([3, 4])
В этом примере мы создали 2D-тензор, заполненный нулями, с 3 строками и 4 столбцами.
Пример 3: Создание целочисленного тензора, заполненного нулями
Пример
# Создать тензор, заполненный нулями, целочисленного типа
x = torch.zeros(3, 3, dtype=torch.int32)
print(x)
print(x.dtype)
Результат вывода:
tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0]], dtype=torch.int32)
</p>
<p>在这个示例中,我们创建了整数类型的全零张量,默认的 <code>float32</code> 被覆盖为 <code>int32</code>。</p>
<h3>示例 4: 创建需要梯度的全零张量</h3>
<div class="example">
<h2 class="example">实例</h2>
<div class="example_code">
<span style="color: Green;font-weight:bold;">import</span> torch<br />
<br />
<span style="color: #a50"># 创建需要梯度的全零张量</span><br />
x <span style="color: Gray;">=</span> torch.<span style="color: #05a;">zeros</span><span style="color: Olive;">(</span><span style="color: Maroon;">3</span><span style="color: Gray;">,</span> requires_grad<span style="color: Gray;">=</span><span style="color: Teal;">True</span><span style="color: Olive;">)</span><br />
<br />
<span style="color: Green;font-weight:bold;">print</span><span style="color: Olive;">(</span>x.<span style="color: #05a;">requires_grad</span><span style="color: Olive;">)</span><br />
</div>
</div>
<p>输出结果为:</p>
<pre>
True
В этом примере мы создали полностью нулевой тензор, который требует вычисления градиента; он используется для обучаемых параметров при обучении нейронных сетей.
Пример 5: Создание полностью нулевого тензора на устройстве CUDA
Пример
# Проверить, доступна ли CUDA
if torch.cuda.is_available():
# Создание полностью нулевого тензора на устройстве CUDA
x = torch.zeros(3, 4, device='cuda')
print(x.device)
else:
print("CUDA is not available")
Результат вывода:
cuda:0
В этом примере мы проверяем, доступна ли CUDA, а затем создаём полностью нулевой тензор на GPU.
Разница между torch.zeros и torch.zeros_like
torch.zeros(*size): Создаёт полностью нулевой тензор в соответствии с указанным размером.torch.zeros_like(input): Создаёт полностью нулевой тензор на основе формы входного тензора, сохраняя dtype и device входного тензора.
Сценарии использования
torch.zerosФункция обычно используется в следующих сценариях:
- Инициализация векторов смещений: В нейронных сетях смещения обычно инициализируются нулями.
- Создание заполнителей: В качестве входных заполнителей в динамических вычислительных графах.
- Заполнение массивов: создайте массив, изначально заполненный нулями, а данные добавьте позже.
- Математические операции: В операциях накопления, где ноль нужен в качестве начального значения.
Примечания
- По умолчанию,
torch.zerosон создаётfloat32тензор типа. - Если вам нужно создать тензор, заполненный нулями, с той же формой, что и другой тензор, вы можете использовать
torch.zeros_like()。 - Тензоры, заполненные нулями, обычно используются для инициализации в глубоком обучении, но в некоторых случаях они могут привести к проблеме исчезающего градиента.
Другие расширения