数据处理如分类问题:
import torch
import numpy as np
import matplotlib.pyplot as plt
from torch.autograd import Variable
import torch.nn.functional as F
n_data = torch.ones(100,2)#data的基数
#x0=torch.normal(2*n_data,int(1))
#x1=torch.normal(-2*n_data,int(1))##normal要将数变成tensor形式
x0=torch.normal(2*n_data,1)#数据的横坐标,纵坐标都包含在x0中
x1=torch.normal(-2*n_data,1)
y0=torch.zeros(100)#x0标签为0
y1=torch.ones(100)#x1标签为1
x=torch.cat((x0,x1),0).type(torch.FloatTensor)#torch.cat合并数据,将x0,x1合并作为数据 32位浮点数
y=torch.cat((y0,y1), ).type(torch.LongTensor)#将y0,y1合并作为标签 64位
网络搭建的两种方法:
方法1:
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.out=torch.nn.Linear(n_hidden,n_output)
def forward(self,x):#将前向传播
x=F.relu(self.hidden(x))
x=self.out(x)
return x
net1=Net(2,10,2)
方法2:利用torch.nn.Sequential快速搭建网络
net2=torch.nn.Sequential(
torch.nn.Linear(2,10),
torch.nn.ReLU(),
torch.nn.Linear(10,2),
)
哈哈,明显第二个短小精悍啊!
打印下来对比一下:
第一个之所以没有relu的原因在于import torch.nn.functional as F已经将relu当做一个功能,小写。
第二个将relu看做一个层,大写。
利用利用torch.nn.Sequential语句可以更加简单的搭建网络。