torch笔记

回归预测层不用激活函数

损失函数:

​ 1 回归用MSE

​ 2 多分类用交叉熵crossEntropyLoss()输出是每个类型的概率,和标签误差,最后nn输出用prediction=F.softmax(out)转换成概率,一般用torch.max(prediction=F.softmax(out))[1]直接返回最大值的数据

链接numpy

numpy.array转tensor

torch.from_numpy(xx_np)

tensor转numpy

xx_tensor.numpy()

variable
#variable变量,nn只能输入variable
from torch.autograd import Variable
variable=Variable(tensor,requires_grad=True)#True计算这个结点的梯度

v_out=fxx(variable)
v_out.backward()
#可以通过variable.grad查看梯度
variable.data
variable.data.numpy()
to device
# 当GPU可用时,我们可以运行以下代码
# 我们将使用`torch.device`来将tensor移入和移出GPU
if torch.cuda.is_available():
    device = torch.device("cuda")          # a CUDA device object
    y = torch.ones_like(x, device=device)  # 直接在GPU上创建tensor
    x = x.to(device)                       # 或者使用`.to("cuda")`方法
    z = x + y
    print(z)
    print(z.to("cpu", torch.double))       # `.to`也能在移动时改变dtype
快速搭建
class Net(torch.nn.Module):
    def __init__(self,n_feature,n_hidden,n_output):
        super(Net,self).__init__()
        self.hidden=torch.nn.Linear(n_feature,n_hidden)#层信息,该层的输入和神经元的个数
        self.predic=torch.nn.Linear(n_hidden,n_output)
      
    def forward(self,x):
        x=F.relu(self.hiddern(X))
        x=self.predict(x)
        return x
    
#快速搭建
net=torch.nn.Sequential(
	torch.nn.Linear(2,10),
    torch.nn.ReLu(),
    torch.nn.Linear(10,2)
)
net=Net(1,10,1)
 
optimizer=torch.optim.SGD(net.parameters,lr=0.2)#SGD可选,lr为学习效率越快越差
loss_func=torch.nn.MSELoss()
 
for t in range(100):
    prediction=net(x)
    loss=loss_func(prediction,y)#这里prediction和y的顺序不能改变
    
    optimizer.zero_grad()#优化参数,先将梯度为0
    loss.backward()#为节点赋参数
    optimizer.step()
    
---
#实时打印
plt.ion()
plt.show()
for t in range(100):#step
    if t%5==0:
        plt()
plt.ioff()
plt.show()
#保存模型
def save():
    torch.save(net,"xxx.pkl")
    torch.save(net,state_dict(),"xx_para.pkl")#只保存参数
    
#提取
def restore_net():
    net2=torch.load("xxx.plk")
    
    net3=torch.nn.Sequential(
	torch.nn.Linear(2,10),
    torch.nn.ReLu(),
    torch.nn.Linear(10,2))
    net3.load_state_dict(torch.load('xx_para.pkl'))
    
#批训练epoch
import torch.utils.data ad Data
BATCH_SIZE=5
torch_dataset=Data.TensorDataset(data_tensor=x_tensor,targer_tensor=y_tensor)
loader=Data.DataLoader(
	dataset=torch_dataset,
    batch_size=BATCH_SIZE,
    shuffle=True,#打乱
    #num_workers=2,#两个线程提取loader,win不用?
)

for epoch in range(x):#把数据整体的训练x次
    #n个训练样本,batch_size为m,每个epoch都要进行n/m个step
    for step,(batch_x,batch_y) in enumerate(loader):
        #training
        print("")
TIME_SIZE=xx
INPUT_SIZE=xx
#rnn考虑x个时间点的数据(输入多少次),在每一个时间点给rnnxx个数据点(一次输入几个数据)

你可能感兴趣的:(python,机器学习)