Вы можете использовать обычные torch.nn.Conv1d
для этого.
Входы
В вашем случае у вас есть 1
канал (1D
) с 300
временными шагами (пожалуйста, обратитесь к документации эти значения будут соответственно C_in
и L_in
).
Таким образом, для вашего ввода это будет (вам нужно 1
там, его нельзя сжать ! ):
import torch
inputs = torch.randn(64, 1, 300)
Свертка
Вам нужно torch.nn.Conv1d
с kernel_size
, равным 5
(как указано вашими элементами: [0.2 0.2 0.2 0.2 0.2]
) и без bias
. Я предполагаю, что ваш вывод должен быть одинакового размера (300
), поэтому 2
элементы должны быть дополнены в начале и в конце. Все это дает нам этот модуль:
module = torch.nn.Conv1d(
in_channels=1, out_channels=1, kernel_size=5, padding=2, bias=False
)
Веса этого модуля (0.2
значения) могут быть определены следующим образом:
module.weight.data = torch.full_like(module.weight.data, 0.2)
torch.full_like
будет работать для ядра любой размер, если вам нужен другой размер, кроме 5
.
Наконец, выполните средние шаги, и все готово:
out = module(inputs)
GPU
Если вы хотите для использования GPU
просто разыграйте module
и inputs
следующим образом:
inputs = inputs.cuda()
module = module.cuda()
См. Документация CUDA для получения дополнительной информации.