主要用于本人学习机器学习模型
学了很多神经网络模型,但是只知道大体框架,具体的实现细节在复制粘贴中也无法明晰
故以下试用tensor,并观察其内部在卷积时的变化
import torch
import numpy as np
import pandas as pd
b = np.array([[1,2,3],[4,5,6],[7,8,9]])
b_torch = torch.from_numpy(b)
print(b_torch)
tensor([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]], dtype=torch.int32)
然后为了试验卷积随机生成一个稍微大些的array转化为tensor
这里要注意c作为array的维数,否则在作卷积的时候会出现维数差异;并且为方便卷积,生成tensor时将其float()化
c = np.random.random_integers(1,20,size=(1,15,15))
c_torch = torch.from_numpy(c).float()
print(c_torch)
tensor([[[18., 14., 8., 5., 13., 16., 3., 13., 5., 10., 1., 4., 19., 13.,
18.],
[11., 18., 4., 13., 4., 20., 6., 11., 5., 12., 15., 7., 1., 19.,
3.],
[14., 8., 18., 14., 15., 13., 16., 1., 20., 16., 16., 19., 2., 8.,
17.],
[19., 1., 20., 12., 2., 8., 16., 4., 15., 20., 9., 5., 11., 6.,
5.],
[18., 3., 13., 15., 2., 20., 12., 1., 2., 13., 11., 14., 11., 11.,
5.],
[13., 9., 1., 13., 14., 19., 10., 16., 10., 18., 14., 17., 18., 15.,
19.],
[16., 10., 1., 7., 7., 6., 5., 10., 5., 17., 11., 3., 7., 14.,
5.],
[ 4., 11., 17., 19., 1., 12., 9., 5., 10., 2., 9., 13., 17., 12.,
1.],
[13., 5., 20., 13., 17., 9., 16., 4., 16., 14., 4., 16., 18., 10.,
14.],
[19., 11., 15., 12., 11., 3., 7., 18., 10., 5., 9., 20., 10., 20.,
18.],
[ 9., 15., 17., 16., 19., 20., 20., 7., 8., 15., 14., 15., 17., 2.,
18.],
[ 2., 1., 16., 14., 6., 17., 18., 15., 13., 11., 13., 3., 10., 2.,
1.],
[19., 4., 16., 17., 1., 18., 20., 4., 15., 1., 8., 13., 16., 3.,
15.],
[13., 14., 12., 10., 13., 15., 5., 12., 3., 5., 16., 3., 20., 12.,
10.],
[13., 5., 4., 2., 4., 8., 11., 6., 10., 5., 16., 10., 12., 3.,
2.]]])
因为随机生成的是一个二维的tensor,所以使用Conv2d来进行卷积处理
以下自定义一个内核用于计算网络输入的通道数为1,输出通道数也为1的内核
m = torch.nn.Conv2d(1,1,4,stride=1,bias=False)
m.weight.data = torch.Tensor([[[[1,2,3,4],
[2,3,4,1],
[3,4,1,2],
[4,1,2,3]]]])
print(m(c_torch))
tensor([[[468., 395., 475., 476., 384., 433., 423., 386., 448., 465., 415.,
414.],
[500., 382., 530., 468., 357., 405., 433., 434., 502., 472., 396.,
350.],
[484., 443., 478., 456., 432., 484., 464., 493., 541., 504., 451.,
467.],
[440., 340., 331., 428., 429., 391., 428., 447., 421., 492., 456.,
413.],
[414., 326., 420., 474., 342., 352., 359., 386., 463., 491., 481.,
413.],
[406., 403., 508., 428., 399., 404., 424., 407., 471., 490., 453.,
527.],
[453., 469., 417., 391., 379., 359., 372., 389., 422., 385., 481.,
547.],
[560., 538., 554., 502., 446., 396., 440., 408., 418., 495., 540.,
518.],
[497., 511., 561., 548., 469., 544., 513., 419., 437., 512., 472.,
486.],
[498., 447., 543., 544., 503., 556., 467., 392., 477., 466., 453.,
451.],
[482., 507., 583., 537., 513., 540., 408., 448., 395., 421., 421.,
394.],
[437., 390., 404., 446., 486., 445., 405., 368., 322., 394., 390.,
319.]]], grad_fn=<SqueezeBackward1>)
收获:通过试验卷积具体数值对卷积更熟悉了,以后看神经网络的代码会有帮助