学习深度学习的笔记,学习资料:跟李沐学AI的个人空间-跟李沐学AI个人主页-哔哩哔哩视频
进度:04
(注:所有代码默认都是在jupyter notebook中完成和运行的)
a=torch.zeros(1)
print(a)
zeros要注明向量的大小信息。
b=torch.arange(12,dtype=torch.float32).reshape(3,4)
print(b)
c=torch.tensor([[2.,1,4,3],[7,7,7,7],[6,6,6,6]])
输出:
tensor([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.]])
可以用一行代码把三个过程都塞进去
一些关键词都需要在torch下面定义,这里如果不写torch.float32而是直接写float32就会报错
d=torch.cat((b,c),dim=0)
e=torch.cat((b,c),dim=1)
print(d,'\n',e)
输出:
tensor([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.], [ 2., 1., 4., 3.], [ 7., 7., 7., 7.], [ 6., 6., 6., 6.]]) tensor([[ 0., 1., 2., 3., 2., 1., 4., 3.], [ 4., 5., 6., 7., 7., 7., 7., 7.], [ 8., 9., 10., 11., 6., 6., 6., 6.]])
这里参数改为dim=1有些问题,似乎从按“行”相加编程按“列”相加了 原来的“行”可以认为是,在a flow of 数组的尾部继续加another flow of 数组 现在按“列”可以认为是,在a flow of 数组的“旁边”(第二维)加上another flow of 数组
b,b[0:2]
b[1:2]
b[1:3]
b[-1]
b[-1:10]
输出:
tensor([[ 8., 9., 10., 11.]])
似乎换行之后的所有元素都直接被忽视了
b,b[0:2],b[1:2],b[1:3],b[1:10]
输出:
(tensor([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.]]), tensor([[0., 1., 2., 3.], [4., 5., 6., 7.]]), tensor([[4., 5., 6., 7.]]), tensor([[ 4., 5., 6., 7.], [ 8., 9., 10., 11.]]), tensor([[ 4., 5., 6., 7.], [ 8., 9., 10., 11.]]))
范围是从0维开始算第一个维的。如果起点和终点都在数组内,那么正常输出(不算终点处的元素) 如:b[0:2]只输出0,1两维;,b[1:2]只输出1一个维 如果终点不在数组内,那么就输出数组含有的部分。
b[-1],b[-1:1],b[-1:2],b[-1:10]
输出:
(tensor([ 8., 9., 10., 11.]), tensor([], size=(0, 4)), tensor([], size=(0, 4)), tensor([[ 8., 9., 10., 11.]]))
一旦-1和其他的维混用就出问题,what the hell?
如何不改变内存呢?直接修改变量内部的元素,如Z[:] = X + Y这种方法,而不是用Y=X+Y