Pycharm-pytorch基础(1)

import torch
import numpy as np
#1.tensor介绍
#?torch.tensor
a=torch.tensor(1.0,dtype=torch.float)
print(a)

#与numpy中数组与tensor中张量的相互读取
g=np.array([[1,2,3],[4,5,6]])

#数组-》张量
h=torch.tensor(g)
print(h)
i=torch.from_numpy(g)
print(i)
#张量-》数组
j=h.numpy()
print(j)

#构建
k=torch.rand(2,3)
l=torch.ones(2,3)
m=torch.zeros(2,3)
n=torch.arange(0,10,2)
print(k,'\n',l,'\n',m,'\n',n)

#查看tensor维度信息的方式
print(k.shape)
#or
print(k.size())

#tensor可以通过add计算
# alpha * b + a, 维度不够的地方自动扩容
#print(torch.add(a, b, alpha=10))

#tensor索引与numpy类似
print(k[:,1],'\n',k[0,:])

#clone 与copy(感觉没什么区别?)
#https://zhuanlan.zhihu.com/p/393041305

#改变tensor形状view和torch.reshape()
print(k.view(3,2))
print(k.view(-1,2))#二列三行

#torch.view()会改变原张量,如果想原始张量和变换后的张量互相不影响,用torch.reshape()
#或.clone()后用torch.view()

#广播机制,维度不一样会自动配齐
p=torch.arange(1,3).view(1,2)
print(p)
q=torch.arange(1,4).view(3,1)
print(q)
print(p+q)

#squeeze和unsqueeze
#坑,squeeze会压缩掉一维度的squeeze
r=k.unsqueeze(1)
print(r)
s=r.squeeze()
print(s)

#end for tensor
#2. pytorch的自动求导
#梯度更新*学习率
#网站 http://towardsdatascience.com
#动态计算图,张量与运算结合
#求导的起始与终止:图中requires_grad为false为起始,requires_grad=true,is_leaf=true是终止
#图被存储下来,存储x,y与其计算结果z的关系,与z的值
import torch
x1=torch.tensor(1.0,requires_grad=True)#支持能被求导?
x2=torch.tensor(2.0,requires_grad=True)
y=x1+2*x2
print(y)

#查看变量导数大小的代码
print(x1.grad.data)
print(x2.grad.data)
print(y.grad.data)

#前向传播没有梯度。反向传播才能看导数大小
y=x1+2*x2
y.backward()
print(x1.grad.data)
print(x2.grad.data)
#导数是会累积的,会在原来导数的基础上再次进行累计,所以要用optimizer清除当前导数

#并行计算:
# (1)如四层网络,前两层在gpu1,后两层在gpu2
# (2)不同数据分布不同设备中,gpu1,gpu2各放一个模型
#cuDNN加速库

安装的有点久啦,没遇到什么问题,只不过之前在pycharm中配置环境的时候比较习惯选虚拟环境,第一次知道正确的流程是seting-interpreter-conda environment-existing environment

还要一些detach,cuda加速计算的内容没有搞清,慢慢补充ing...

你可能感兴趣的:(FYP笔记,深度学习)