I think you are confusing your self, kernels in conv2d are already randomly defined for you.

You can check this by doing this:

```
X = nn.Conv2D( 1, 1, 3, 1, 1) # ( input_c, output_c, k_size, stride, padding ), k_size can be (3,3) or 3
X.weight # a single 3 x 3 kernel, if you want to output more kernels you can try and change "output_c" to see what happens
```

```
Parameter containing:
tensor([[[[-0.2303, -0.0186, -0.2070],
[ 0.3190, -0.2940, -0.1227],
[ 0.1014, 0.0417, -0.3254]]]])
```

I am guessing you want to use predefined weights as values for the kernel in conv2D correct?

If so you can do the following.

```
X = torch.Tensor([[1 ,0, -1],[2, 0 ,-2], [1, 0 ,-1]])
X = torch.nn.Parameter( X ) # calling this turns tensor into "weight" parameter
print( "X's size", X.size() )
print("X's tensor values as weight: ", X)
Z = nn.Conv2d( 1, 1, 3, 1, 1) # creates a test convolution
print("Z's pre-initalized weight from Conv2D: ", Z.weight, "its size is: ", Z.weight.size())
Z.weight = X # simply copying over the new weight
print("Z's new weight ", Z.weight)
```

Xâ€™s size torch.Size([3, 3])

Xâ€™s tensor values as weight: Parameter containing:

tensor([

[ 1., 0., -1.],

[ 2., 0., -2.],

[ 1., 0., -1.]])

Zâ€™s pre-initalized weight from Conv2D: Parameter containing:

tensor([[[

[-0.1911, 0.0187, 0.0254],

[-0.0727, -0.1672, 0.0862],

[ 0.2888, 0.2479, 0.3203]]]])

Its size is: torch.Size([1, 1, 3, 3])

Zâ€™s new weight Parameter containing:

tensor([

[ 1., 0., -1.],

[ 2., 0., -2.],

[ 1., 0., -1.]])

Edited Finally if you want to make sure the output size is correct the above 2 post has the answers. You can also google the output convolution formula and the documentations for Conv2D also has it. Good Luck!