module Torch module NN class Conv2d < ConvNd attr_reader :bias, :weight def initialize(in_channels, out_channels, kernel_size, stride: 1, padding: 0, dilation: 1, groups: 1, bias: true, padding_mode: "zeros") kernel_size = pair(kernel_size) stride = pair(stride) padding = pair(padding) dilation = pair(dilation) super(in_channels, out_channels, kernel_size, stride, padding, dilation, false, pair(0), groups, bias, padding_mode) end def forward(input) if @padding_mode == "circular" raise NotImplementedError end F.conv2d(input, @weight, @bias, stride: @stride, padding: @padding, dilation: @dilation, groups: @groups) end # TODO add more parameters def inspect "Conv2d(#{@in_channels}, #{@out_channels}, kernel_size: #{@kernel_size.inspect}, stride: #{@stride.inspect})" end private def pair(value) if value.is_a?(Array) value else [value] * 2 end end end end end